refactor(menu): Made sure the menu can be used for more than group
This commit is contained in:
parent
a79898b2e9
commit
1d73ee8a78
16 changed files with 650 additions and 406 deletions
43
source/Menu/MenuRenderer.types.ts
Normal file
43
source/Menu/MenuRenderer.types.ts
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import {MessageActionRowComponentBuilder} from "@discordjs/builders";
|
||||
import {TraversalKey, TraversalPath} from "./MenuTraversal.types";
|
||||
import {MenuTraversal} from "./MenuTraversal";
|
||||
import {Snowflake, TextInputBuilder} from "discord.js";
|
||||
|
||||
export enum MenuItemType {
|
||||
Collection,
|
||||
Field,
|
||||
Prompt
|
||||
}
|
||||
|
||||
export type MenuItem = {
|
||||
traversalKey: TraversalKey,
|
||||
label: string,
|
||||
description?: string
|
||||
}
|
||||
|
||||
export type CollectionMenuItem = MenuItem & {
|
||||
type: MenuItemType.Collection,
|
||||
children: AnyMenuItem[]
|
||||
}
|
||||
|
||||
export type FieldMenuItem = MenuItem & {
|
||||
type: MenuItemType.Field,
|
||||
getCurrentValue(context: FieldMenuItemContext): string,
|
||||
getActionRowBuilder(context: FieldMenuItemContext): MessageActionRowComponentBuilder,
|
||||
setValue(value: FieldMenuItemSaveValue[], context: FieldMenuItemContext): void
|
||||
}
|
||||
export type PromptMenuItem = MenuItem & {
|
||||
type: MenuItemType.Prompt,
|
||||
getCurrentValue(context: FieldMenuItemContext): string,
|
||||
getActionRowBuilder(context: FieldMenuItemContext): TextInputBuilder,
|
||||
setValue(value: string, context: FieldMenuItemContext): void
|
||||
}
|
||||
|
||||
export type AnyMenuItem = CollectionMenuItem | FieldMenuItem | PromptMenuItem;
|
||||
export type MenuAction = "MOVE"|"SET"|"EXIT";
|
||||
|
||||
export type FieldMenuItemContext = {
|
||||
path: TraversalPath,
|
||||
}
|
||||
|
||||
export type FieldMenuItemSaveValue = string | Snowflake;
|
||||
Loading…
Add table
Add a link
Reference in a new issue