2022-07-15 18:13:24 -05:00

32 lines
1.3 KiB
TypeScript

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;