From 4588a79bde3816e09b36ea64f5c9af43daa57ef9 Mon Sep 17 00:00:00 2001 From: MineKing Date: Fri, 29 Dec 2023 16:11:29 +0100 Subject: [PATCH] Fix ListManager --- .../discordutils/list/ListManager.java | 25 +++++++++++-------- src/test/java/list/ListBot.java | 5 +++- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/mineking/discordutils/list/ListManager.java b/src/main/java/de/mineking/discordutils/list/ListManager.java index cabeed9..1629711 100644 --- a/src/main/java/de/mineking/discordutils/list/ListManager.java +++ b/src/main/java/de/mineking/discordutils/list/ListManager.java @@ -58,6 +58,7 @@ public ListManager setPageOption(@NotNull OptionData option) { * @return The resulting menu */ @NotNull + @SuppressWarnings("unchecked") public MessageMenu createListMenu(@NotNull String path, @NotNull Function, Listable> object, @NotNull ComponentRow... additionalComponents) { Checks.notNull(path, "path"); Checks.notNull(object, "object"); @@ -107,23 +108,27 @@ public MessageMenu createListMenu(@NotNull String path, @N s.setCache("size", context.entries().size()); s.setCache("context", context); + + setEntries(s); }).effect("page", (state, name, old, n) -> { if(old != null && toInt(old) == toInt(n)) return; + setEntries((DataState) state); + }); + } - var context = state.>getCache("context"); - if(context == null) return; + private void setEntries(@NotNull DataState state) { + var context = state.>getCache("context"); + if(context == null) return; - var o = state.>getCache("object"); + var o = state.>getCache("object"); - int page = Math.max(Math.min(state.getState("page"), state.getCache("maxpage")), 1); - state.setState("page", page); + int page = Math.max(Math.min(state.getState("page"), state.getCache("maxpage")), 1); + state.setState("page", page); - @SuppressWarnings("unchecked") - var entries = new ArrayList<>(o.getEntries((DataState) state, context)); + var entries = new ArrayList<>(o.getEntries(state, context)); - context.entries().clear(); - context.entries().addAll(entries.subList(((page - 1) * o.entriesPerPage()), Math.min((page * o.entriesPerPage()), entries.size()))); - }); + context.entries().clear(); + context.entries().addAll(entries.subList(((page - 1) * o.entriesPerPage()), Math.min((page * o.entriesPerPage()), entries.size()))); } private Integer toInt(Object o) { diff --git a/src/test/java/list/ListBot.java b/src/test/java/list/ListBot.java index 9e6394a..5d14479 100644 --- a/src/test/java/list/ListBot.java +++ b/src/test/java/list/ListBot.java @@ -2,6 +2,9 @@ import de.mineking.discordutils.DiscordUtils; import de.mineking.discordutils.commands.CommandManager; +import de.mineking.discordutils.ui.components.button.ButtonColor; +import de.mineking.discordutils.ui.components.button.ButtonComponent; +import de.mineking.discordutils.ui.state.UpdateState; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.OnlineStatus; @@ -29,7 +32,7 @@ public ListBot(String token) { AutocompleteContext::new, CommandManager::updateCommands ) - .useListManager(config -> config.getManager().getCommandManager().registerCommand(config.createCommand(state -> new TestList()).withName("list_test"))) + .useListManager(config -> config.getManager().getCommandManager().registerCommand(config.createCommand(state -> new TestList(), new ButtonComponent("test", ButtonColor.GRAY, "TEST").appendHandler(UpdateState::update)).withName("list_test"))) .build(); } }