import React from "react";
import clsx from "clsx";
import { ContextualMenu, ContextWrapper } from "@gland/react/menu";
import { TargetContext } from "../../core";
import { richClasses as classes } from "../style";
import { editEvent } from "../editEvent";
import { langType } from "../lang/zh";
export function Table(props) {
const column = props.data.column;
const rows = [];
const keyMap = {
[props.head.key]: true,
};
let cols = [];
for (let i = 0; i < props.childs.length; i++) {
const item = props.childs[i];
keyMap[item.key] = true;
cols.push(item);
if (cols.length >= column) {
rows.push(cols);
cols = [];
}
}
if (cols.length) {
rows.push(cols);
}
return ;
}
function TableWithTargetKey(props) {
const { rows, keyMap } = props;
let target: any = React.useContext(TargetContext);
const isSelected = !props.props.context.readOnly && Boolean(keyMap[target.key]);
let targetKey = isSelected ? target.key : null;
return ;
}
const TableRender = React.memo(function (props: any) {
const { rows, targetKey } = props;
let { data, context, head } = props.props;
const { widthType, width, align } = data;
const { readOnly, lang } = context;
const blockKey = head.key;
let w = null;
if (width) {
if (widthType === "rate") {
w = width + "%";
} else if (widthType === "px") {
w = width + "px";
}
}
const attr = React.useMemo(
() => ({
right: null,
}),
[]
);
return (
{rows.map(function (row, i) {
return (
{row.map(function (item, j) {
return (
{
event.preventDefault();
attr.right.show({
top: event.clientY,
left: event.clientX,
point: [i, j],
});
}
}
>
{item}
);
})}
);
})}
{readOnly ? null : (
(attr.right = r)} lang={lang} event={context.event} rows={rows} blockKey={blockKey} tableData={data} />
)}
);
});
export const RightContext = React.forwardRef(function (props: any, ref) {
let [opt, setOpt] = React.useState(null);
let [show, setShow] = React.useState(false);
const { event, rows, blockKey, tableData } = props;
const lang: langType = props.lang;
React.useImperativeHandle(ref, () => ({
show(opt) {
setOpt(opt);
setShow(true);
},
}));
const items = React.useMemo(() => {
if (!opt) return [];
const { point } = opt;
let disRow = false;
let disCol = false;
if (rows.length >= 20) {
disRow = true;
}
if (rows[0].length >= 10) {
disCol = true;
}
let data = {
point,
};
return [
{
key: "col-left",
text: lang.other.addLeftCol,
data,
disabled: disCol,
},
{
key: "col-right",
text: lang.other.addRightCol,
data,
disabled: disCol,
},
{
key: "row-up",
text: lang.other.addUpRow,
data,
disabled: disRow,
},
{
key: "row-down",
text: lang.other.addDownRow,
data,
disabled: disRow,
},
{
key: "d1",
type: "divider" as any,
},
{
key: "col-del",
text: lang.other.delCol,
data,
},
{
key: "row-del",
text: lang.other.delRow,
data,
},
{
key: "d2",
type: "divider",
},
{
key: "table-attr",
text: lang.other.tableAttr,
data,
},
];
}, [opt]);
return (
{
setShow(false);
}}
>
{
setShow(false);
const type = item.key;
const data = item.data;
let numTypes = ["col-left", "col-right", "row-up", "row-down", "col-del", "row-del"];
if (numTypes.indexOf(type) !== -1) {
event.emit(editEvent.editTableNum, {
key: blockKey,
type,
point: data.point,
rows,
});
} else if (type === "table-attr") {
event.emit(editEvent.openEditTable, {
key: blockKey,
data: tableData,
});
}
}}
/>
);
});