pnp-scheduler/source/Menu/MenuRenderer.types.ts

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;