import type { Table, TableData } from "@sealcode/jdd"; import { isTableHeader } from "@sealcode/jdd"; import type { StatefulPage } from "@sealcode/sealgen"; import type { BaseContext } from "koa"; import { TempstreamJSX } from "tempstream"; import { makeJDDContext } from "../../jdd-context.js"; import { ComponentInput } from "./component-input.js"; import type { ComponentPreviewActions } from "./component-preview-actions.js"; import type { JDDPageState } from "./jdd-page.js"; import add_column_right_icon from "./table-add-column-right.svg"; import add_row_below_icon from "./table-add-row-below.svg"; import add_column_header_icon from "./table-add-row-header-below.svg"; import delete_column_icon from "./table-delete-column.svg"; import delete_row_icon from "./table-delete-row.svg"; import move_column_right_icon from "./table-move-column-right.svg"; import move_row_down_icon from "./table-move-row-down.svg"; export async function ComponentInputTable< State extends JDDPageState, CellType, HeaderType >({ state, arg_path, ctx, arg, value, page, }: { state: State; ctx: BaseContext; arg_path: string[]; arg: Table; value: TableData; page: StatefulPage; }): Promise { if (!value) { value = await arg.getEmptyValue(makeJDDContext(ctx)); } return (
{arg_path.at(-1)}
{[...Array(arg.getColumnsCount(value)).keys()].map( (column_index) => ( ) )} {value.rows.map((row, row_index) => ( {isTableHeader(row) ? ( ) : ( row.cells.map((cell, cell_index) => ( )) )} {row_index == 0 ? ( ) : ( "" )} ))}
{page.makeActionButton( state, { action: "remove_table_column", label: "Remove column", content: /* HTML */ ``, }, arg_path, column_index )} {column_index >= arg.getColumnsCount(value) - 1 ? "" : page.makeActionButton( state, { action: "move_table_column_right", label: "Move column to the right", content: /* HTML */ ``, }, arg_path, column_index )}
{page.makeActionButton( state, { action: "remove_table_row", label: "Remove row", content: /* HTML */ ``, }, arg_path, row_index )} {page.makeActionButton( state, { action: "move_table_row_down", label: "Move this row down", content: /* HTML */ ``, }, arg_path, row_index )}
{page.makeActionButton( state, { action: "add_table_column", label: "Add column", content: /* HTML */ ``, }, arg_path )}
{page.makeActionButton( state, { action: "add_table_row", label: "Add table row", content: /* HTML */ ``, }, arg_path, arg.getColumnsCount(value) )} {page.makeActionButton( state, { action: "add_table_row", label: "Add table header", content: /* HTML */ ``, }, arg_path, arg.getColumnsCount(value), "header" )}
); }