Files
invyone/frontend/components/builder/props/TableProps.tsx
T
2026-04-10 13:33:37 +09:00

65 lines
2.8 KiB
TypeScript

"use client";
import React from "react";
import { useBuilderState } from "../hooks/useBuilderState";
import FieldListEditor from "./FieldListEditor";
import type { Component, TableConfig } from "@/types/invyone-component";
export default function TableProps({ block }: { block: Component }) {
const updateBlockConfig = useBuilderState((s) => s.updateBlockConfig);
const config = block.config as TableConfig;
const update = (key: string, val: any) => updateBlockConfig(block.id, { [key]: val });
return (
<>
<div className="dev-prop-sec"> </div>
<div className="dev-prop-row inline">
<span className="dev-prop-label"> </span>
<select className="dev-select" value={config.pageSize}
onChange={(e) => update("pageSize", Number(e.target.value))}>
{[10, 20, 50, 100].map((n) => <option key={n} value={n}>{n}</option>)}
</select>
</div>
<div className="dev-prop-row inline">
<span className="dev-prop-label"> </span>
<select className="dev-select" value={config.selectionMode}
onChange={(e) => update("selectionMode", e.target.value)}>
<option value="none"></option>
<option value="single"></option>
<option value="multiple"></option>
</select>
</div>
<div className="dev-prop-row inline">
<span className="dev-prop-label"> </span>
<div className={`dev-toggle${config.autoLoad ? " on" : ""}`}
onClick={() => update("autoLoad", !config.autoLoad)} />
</div>
<div className="dev-prop-row inline">
<span className="dev-prop-label"> </span>
<div className={`dev-toggle${config.inlineEdit ? " on" : ""}`}
onClick={() => update("inlineEdit", !config.inlineEdit)} />
</div>
<div className="dev-prop-row inline">
<span className="dev-prop-label"></span>
<div className={`dev-toggle${config.showCheckbox ? " on" : ""}`}
onClick={() => update("showCheckbox", !config.showCheckbox)} />
</div>
<div className="dev-prop-row inline">
<span className="dev-prop-label"></span>
<select className="dev-select" value={config.style}
onChange={(e) => update("style", e.target.value)}>
<option value="default"></option>
<option value="striped"></option>
<option value="bordered"></option>
<option value="compact"></option>
</select>
</div>
<div className="dev-prop-sec"> </div>
<div className="dev-hint">체크: 보이기 · 클릭: 상세 </div>
<FieldListEditor filter={(f) => !f.system} toggleKey="visible" />
</>
);
}