refactor(menu): Made sure the menu can be used for more than group

This commit is contained in:
Michel Fedde 2025-06-20 17:48:00 +02:00
parent a79898b2e9
commit 1d73ee8a78
16 changed files with 650 additions and 406 deletions

View 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;