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;