Compare commits

..

3 commits

Author SHA1 Message Date
0e1bc43ac4 WIP: Start of list command
Some checks failed
Test / build (push) Failing after 12s
2024-11-25 19:09:02 +00:00
78fcdeeca5 Create row helper function 2024-11-25 18:45:46 +00:00
96bbd3b28a Create embed helper function 2024-11-25 18:35:43 +00:00
3 changed files with 52 additions and 14 deletions

View file

@ -14,5 +14,17 @@ export default class Effects extends Command {
}
public override async execute(interaction: CommandInteraction) {
if (!interaction.isChatInputCommand()) return;
const subcommand = interaction.options.getSubcommand();
switch (subcommand) {
case "list":
await this.List(interaction);
break;
}
}
private async List(interaction: CommandInteraction) {
}
}

View file

@ -58,18 +58,17 @@ 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 all = await repository.find({
where: { UserId: userId },
order: { Name: "ASC" },
skip: page * itemsPerPage,
take: itemsPerPage,
});
const query = await repository.createQueryBuilder("effect")
.where("effect.UserId = :userId", { userId })
.where("effect.Unused > 0")
.orderBy("effect.Name", "ASC")
.skip(page * itemsPerPage)
.take(itemsPerPage)
.getManyAndCount();
return all;
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()
.setCustomId(`effects list ${page + 1}`)
.setLabel("Next")
.setStyle(ButtonStyle.Primary)
.setDisabled(isLastPage),
);
return {
embed,
row,
};
}
}