diff --git a/library/core/components/action-row.tsx b/library/core/components/action-row.tsx new file mode 100644 index 0000000..639e95b --- /dev/null +++ b/library/core/components/action-row.tsx @@ -0,0 +1,26 @@ +import type { ReactNode } from "react" +import React from "react" +import { ReacordElement } from "../../internal/element.js" +import type { MessageOptions } from "../../internal/message" +import { Node } from "../../internal/node.js" + +export type ActionRowProps = { + children?: ReactNode +} + +export function ActionRow(props: ActionRowProps) { + return ( + new ActionRowNode(props)}> + {props.children} + + ) +} + +class ActionRowNode extends Node<{}> { + override modifyMessageOptions(options: MessageOptions): void { + options.actionRows.push([]) + for (const child of this.children) { + child.modifyMessageOptions(options) + } + } +} diff --git a/library/internal/message.ts b/library/internal/message.ts index 765d3d4..df89a31 100644 --- a/library/internal/message.ts +++ b/library/internal/message.ts @@ -9,7 +9,7 @@ export type MessageOptions = { actionRows: ActionRow[] } -type ActionRow = Array< +export type ActionRow = Array< MessageButtonOptions | MessageLinkOptions | MessageSelectOptions > diff --git a/library/main.ts b/library/main.ts index f99a699..ba513f1 100644 --- a/library/main.ts +++ b/library/main.ts @@ -1,5 +1,6 @@ export * from "./core/adapters/adapter" export * from "./core/adapters/discord-js-adapter" +export * from "./core/components/action-row" export * from "./core/components/button" export * from "./core/components/embed" export * from "./core/components/embed-author" diff --git a/test/action-row.test.tsx b/test/action-row.test.tsx new file mode 100644 index 0000000..39dc757 --- /dev/null +++ b/test/action-row.test.tsx @@ -0,0 +1,40 @@ +import React from "react" +import { ActionRow, Button, Select } from "../library/main" +import { setupReacordTesting } from "./setup-testing" + +const { assertRender } = setupReacordTesting() + +test("action row", async () => { + await assertRender( + <> +