43 lines
No EOL
1.3 KiB
TypeScript
43 lines
No EOL
1.3 KiB
TypeScript
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<TCollection extends MenuItem = AnyMenuItem> = MenuItem & {
|
|
type: MenuItemType.Collection,
|
|
children: TCollection[]
|
|
}
|
|
|
|
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; |