Skip to content

Commit

Permalink
Fix ListManager
Browse files Browse the repository at this point in the history
  • Loading branch information
MineKing9534 committed Dec 29, 2023
1 parent 20ca020 commit 4588a79
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 11 deletions.
25 changes: 15 additions & 10 deletions src/main/java/de/mineking/discordutils/list/ListManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public ListManager<C> setPageOption(@NotNull OptionData option) {
* @return The resulting menu
*/
@NotNull
@SuppressWarnings("unchecked")
public <T extends ListEntry> MessageMenu createListMenu(@NotNull String path, @NotNull Function<DataState<MessageMenu>, Listable<T>> object, @NotNull ComponentRow... additionalComponents) {
Checks.notNull(path, "path");
Checks.notNull(object, "object");
Expand Down Expand Up @@ -107,23 +108,27 @@ public <T extends ListEntry> 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<MessageMenu>) state);
});
}

var context = state.<ListContext<T>>getCache("context");
if(context == null) return;
private <T extends ListEntry> void setEntries(@NotNull DataState<MessageMenu> state) {
var context = state.<ListContext<T>>getCache("context");
if(context == null) return;

var o = state.<Listable<T>>getCache("object");
var o = state.<Listable<T>>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<MessageMenu>) 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) {
Expand Down
5 changes: 4 additions & 1 deletion src/test/java/list/ListBot.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}
}

0 comments on commit 4588a79

Please sign in to comment.