Create list effects command #412

Merged
Vylpes merged 15 commits from feature/379-list-effects into develop 2024-12-07 22:32:20 +00:00
2 changed files with 33 additions and 8 deletions
Showing only changes of commit 78fcdeeca5 - Show all commits

View file

@ -58,9 +58,7 @@ export default class UserEffect extends AppBaseEntity {
return single;
}
public static async FetchAllByUserIdPaginated(userId: string, page: number = 0): Promise<UserEffect[]> {
const itemsPerPage = 10;
public static async FetchAllByUserIdPaginated(userId: string, page: number = 0, itemsPerPage: number = 10): Promise<[UserEffect[], number]> {
const repository = AppDataSource.getRepository(UserEffect);
const query = await repository.createQueryBuilder("effect")
@ -69,7 +67,7 @@ export default class UserEffect extends AppBaseEntity {
.orderBy("effect.Name", "ASC")
.skip(page * itemsPerPage)
.take(itemsPerPage)
.getMany();
.getManyAndCount();
return query;
}

View file

@ -1,4 +1,4 @@
import {EmbedBuilder} from "discord.js";
import {ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder} from "discord.js";
import UserEffect from "../database/entities/app/UserEffect";
import EmbedColours from "../constants/EmbedColours";
@ -49,8 +49,18 @@ export default class EffectHelper {
return true;
}
public static async GenerateEffectEmbed(userId: string, page: number): Promise<EmbedBuilder> {
const effects = await UserEffect.FetchAllByUserIdPaginated(userId, page - 1);
public static async GenerateEffectEmbed(userId: string, page: number): Promise<{
embed: EmbedBuilder,
row: ActionRowBuilder<ButtonBuilder>,
}> {
const itemsPerPage = 10;
const query = await UserEffect.FetchAllByUserIdPaginated(userId, page - 1, itemsPerPage);
const effects = query[0];
const count = query[1];
const isLastPage = Math.ceil(count / itemsPerPage) - 1 == page;
let description = "*none*";
@ -63,6 +73,23 @@ export default class EffectHelper {
.setDescription(description)
.setColor(EmbedColours.Ok);
return embed;
const row = new ActionRowBuilder<ButtonBuilder>()
.addComponents(
new ButtonBuilder()
.setCustomId(`effects list ${page - 1}`)
.setLabel("Previous")
.setStyle(ButtonStyle.Primary)
.setDisabled(page == 0),
new ButtonBuilder()
Vylpes marked this conversation as resolved Outdated

The 'Previous' button should be disabled when 'page' is 1, not 0.

The 'Previous' button should be disabled when 'page' is 1, not 0.
.setCustomId(`effects list ${page + 1}`)
.setLabel("Next")
.setStyle(ButtonStyle.Primary)
.setDisabled(isLastPage),
);
return {
embed,
row,
};
}
}