Skip to content

Commit

Permalink
feat: add modal appearance
Browse files Browse the repository at this point in the history
  • Loading branch information
SocketSomeone committed Jan 13, 2024
1 parent bf93026 commit 453df34
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
7 changes: 7 additions & 0 deletions src/interfaces/necord-pagination-options.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,19 @@ export interface ButtonAppearance {
emoji?: string;
}

export interface ModalAppearance {
title?: string;
label?: string;
placeholder?: string;
}

export type ButtonsAppearance = {
[key in PaginationAction]?: ButtonAppearance;
};

export interface NecordPaginationOptions {
buttons?: ButtonsAppearance;
modal?: ModalAppearance;
allowSkip?: boolean;
allowTraversal?: boolean;
}
25 changes: 20 additions & 5 deletions src/necord-pagination.controller.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,46 @@
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import { NecordPaginationService } from './necord-pagination.service';
import { Button, ButtonContext, ComponentParam, Context, Modal, ModalParam } from 'necord';
import { PaginationForbiddenException, PaginationNotFoundException } from './exceptions';
import { ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle } from 'discord.js';
import { ModalAppearance, NecordPaginationOptions } from './interfaces';
import { MODULE_OPTIONS_TOKEN } from './necord-pagination.module-definition';

@Injectable()
export class NecordPaginationController {
public constructor(private readonly paginationService: NecordPaginationService) {}
public constructor(
private readonly paginationService: NecordPaginationService,
@Inject(MODULE_OPTIONS_TOKEN)
private readonly options: NecordPaginationOptions
) {}

@Button('necord-pagination/:name/traversal')
public async onTraversal(
@Context() [interaction]: ButtonContext,
@ComponentParam('name') name: string
) {
const pageBuilder = this.paginationService.get(name);
const modalOptions: ModalAppearance = Object.assign(
{
title: 'Traversal',
label: 'Page',
placeholder: 'Enter page number'
},
this.options?.modal ?? {}
);

const modal = new ModalBuilder()
.setCustomId(`necord-pagination-modal/${name}`)
.setTitle('Traversal');
.setTitle(modalOptions.title);

if (!pageBuilder) throw new PaginationNotFoundException();

if (!(await pageBuilder.filter(interaction))) throw new PaginationForbiddenException();

const pageInput = new TextInputBuilder()
.setLabel('Page')
.setLabel(modalOptions.label)
.setCustomId('page')
.setPlaceholder('Enter page number')
.setPlaceholder(modalOptions.placeholder)
.setMinLength(1)
.setMaxLength(String(pageBuilder.maxPages).length)
.setStyle(TextInputStyle.Short)
Expand Down

0 comments on commit 453df34

Please sign in to comment.