import type { Session } from "../../Session.ts"; import type { DiscordComponent, DiscordInputTextComponent } from "../../../discordeno/mod.ts"; import type { Component } from "./Component.ts"; import { ButtonStyles, MessageComponentTypes } from "../../../discordeno/mod.ts"; import ActionRow from "./ActionRowComponent.ts"; import Button from "./ButtonComponent.ts"; import LinkButton from "./ButtonComponent.ts"; import SelectMenu from "./SelectMenuComponent.ts"; import TextInput from "./TextInputComponent.ts"; export class ComponentFactory { /** * Component factory * @internal */ static from(session: Session, component: DiscordComponent): Component { switch (component.type) { case MessageComponentTypes.ActionRow: return new ActionRow(session, component); case MessageComponentTypes.Button: if (component.style === ButtonStyles.Link) return new LinkButton(session, component); return new Button(session, component); case MessageComponentTypes.SelectMenu: return new SelectMenu(session, component); case MessageComponentTypes.InputText: return new TextInput(session, component as DiscordInputTextComponent); } } } export default ComponentFactory;