Add setting to show field summary
This commit is contained in:
parent
3a335950b5
commit
dafa8747a0
@ -178,6 +178,12 @@ export default function ControlPanel(props) {
|
|||||||
setSettings((prev) => ({ ...prev, strictMode: !prev.strictMode }));
|
setSettings((prev) => ({ ...prev, strictMode: !prev.strictMode }));
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"Field summary": {
|
||||||
|
children: [],
|
||||||
|
function: () => {
|
||||||
|
setSettings((prev) => ({ ...prev, showFieldSummary: !prev.showFieldSummary }));
|
||||||
|
},
|
||||||
|
},
|
||||||
"Reset view": {
|
"Reset view": {
|
||||||
children: [],
|
children: [],
|
||||||
function: () => {},
|
function: () => {},
|
||||||
|
@ -29,7 +29,12 @@ import {
|
|||||||
SideSheet,
|
SideSheet,
|
||||||
Toast,
|
Toast,
|
||||||
} from "@douyinfe/semi-ui";
|
} from "@douyinfe/semi-ui";
|
||||||
import { LayoutContext, TabContext, TableContext } from "../pages/editor";
|
import {
|
||||||
|
LayoutContext,
|
||||||
|
SettingsContext,
|
||||||
|
TabContext,
|
||||||
|
TableContext,
|
||||||
|
} from "../pages/editor";
|
||||||
|
|
||||||
export default function Table(props) {
|
export default function Table(props) {
|
||||||
const [isHovered, setIsHovered] = useState(false);
|
const [isHovered, setIsHovered] = useState(false);
|
||||||
@ -38,6 +43,7 @@ export default function Table(props) {
|
|||||||
const { layout } = useContext(LayoutContext);
|
const { layout } = useContext(LayoutContext);
|
||||||
const { setTables } = useContext(TableContext);
|
const { setTables } = useContext(TableContext);
|
||||||
const { tab, setTab } = useContext(TabContext);
|
const { tab, setTab } = useContext(TabContext);
|
||||||
|
const { settings } = useContext(SettingsContext);
|
||||||
|
|
||||||
const height = props.tableData.fields.length * 36 + 50 + 3;
|
const height = props.tableData.fields.length * 36 + 50 + 3;
|
||||||
|
|
||||||
@ -199,7 +205,7 @@ export default function Table(props) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{props.tableData.fields.map((e, i) => {
|
{props.tableData.fields.map((e, i) => {
|
||||||
return (
|
return settings.showFieldSummary ? (
|
||||||
<Popover
|
<Popover
|
||||||
key={i}
|
key={i}
|
||||||
content={
|
content={
|
||||||
@ -242,73 +248,10 @@ export default function Table(props) {
|
|||||||
position="right"
|
position="right"
|
||||||
showArrow
|
showArrow
|
||||||
>
|
>
|
||||||
<div
|
{field(e, i)}
|
||||||
className={`${
|
|
||||||
i === props.tableData.fields.length - 1
|
|
||||||
? ""
|
|
||||||
: "border-b border-gray-400"
|
|
||||||
} h-[36px] px-2 py-1 flex justify-between`}
|
|
||||||
onMouseEnter={() => {
|
|
||||||
setHoveredField(i);
|
|
||||||
props.setOnRect({
|
|
||||||
tableId: props.tableData.id,
|
|
||||||
field: i,
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
onMouseLeave={() => {
|
|
||||||
setHoveredField(-1);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
className={`${hoveredField === i ? "text-slate-500" : ""}`}
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
className={`w-[10px] h-[10px] bg-[#2f68ad] opacity-80 z-50 rounded-full me-2`}
|
|
||||||
onMouseDown={(ev) => {
|
|
||||||
props.handleGripField(i);
|
|
||||||
props.setLine((prev) => ({
|
|
||||||
...prev,
|
|
||||||
startFieldId: i,
|
|
||||||
startTableId: props.tableData.id,
|
|
||||||
startX: props.tableData.x + 15,
|
|
||||||
startY: props.tableData.y + i * 36 + 50 + 19,
|
|
||||||
endX: props.tableData.x + 15,
|
|
||||||
endY: props.tableData.y + i * 36 + 50 + 19,
|
|
||||||
}));
|
|
||||||
}}
|
|
||||||
></button>
|
|
||||||
{e.name}
|
|
||||||
</div>
|
|
||||||
<div className="text-slate-400">
|
|
||||||
{hoveredField === i ? (
|
|
||||||
<Button
|
|
||||||
theme="solid"
|
|
||||||
size="small"
|
|
||||||
style={{
|
|
||||||
opacity: "0.7",
|
|
||||||
backgroundColor: "#d42020",
|
|
||||||
}}
|
|
||||||
onClick={(ev) => {
|
|
||||||
setTables((prev) => {
|
|
||||||
const updatedTables = [...prev];
|
|
||||||
const updatedFields = [
|
|
||||||
...updatedTables[props.tableData.id].fields,
|
|
||||||
];
|
|
||||||
updatedFields.splice(i, 1);
|
|
||||||
updatedTables[props.tableData.id].fields = [
|
|
||||||
...updatedFields,
|
|
||||||
];
|
|
||||||
return updatedTables;
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
icon={<IconMinus />}
|
|
||||||
></Button>
|
|
||||||
) : (
|
|
||||||
e.type
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Popover>
|
</Popover>
|
||||||
|
) : (
|
||||||
|
field(e, i)
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
@ -748,4 +691,71 @@ export default function Table(props) {
|
|||||||
</SideSheet>
|
</SideSheet>
|
||||||
</g>
|
</g>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
function field(fieldData, index) {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={`${
|
||||||
|
index === props.tableData.fields.length - 1
|
||||||
|
? ""
|
||||||
|
: "border-b border-gray-400"
|
||||||
|
} h-[36px] px-2 py-1 flex justify-between`}
|
||||||
|
onMouseEnter={() => {
|
||||||
|
setHoveredField(index);
|
||||||
|
props.setOnRect({
|
||||||
|
tableId: props.tableData.id,
|
||||||
|
field: index,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
onMouseLeave={() => {
|
||||||
|
setHoveredField(-1);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className={`${hoveredField === index ? "text-slate-500" : ""}`}>
|
||||||
|
<button
|
||||||
|
className={`w-[10px] h-[10px] bg-[#2f68ad] opacity-80 z-50 rounded-full me-2`}
|
||||||
|
onMouseDown={(ev) => {
|
||||||
|
props.handleGripField(index);
|
||||||
|
props.setLine((prev) => ({
|
||||||
|
...prev,
|
||||||
|
startFieldId: index,
|
||||||
|
startTableId: props.tableData.id,
|
||||||
|
startX: props.tableData.x + 15,
|
||||||
|
startY: props.tableData.y + index * 36 + 50 + 19,
|
||||||
|
endX: props.tableData.x + 15,
|
||||||
|
endY: props.tableData.y + index * 36 + 50 + 19,
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
|
{fieldData.name}
|
||||||
|
</div>
|
||||||
|
<div className="text-slate-400">
|
||||||
|
{hoveredField === index ? (
|
||||||
|
<Button
|
||||||
|
theme="solid"
|
||||||
|
size="small"
|
||||||
|
style={{
|
||||||
|
opacity: "0.7",
|
||||||
|
backgroundColor: "#d42020",
|
||||||
|
}}
|
||||||
|
onClick={(ev) => {
|
||||||
|
setTables((prev) => {
|
||||||
|
const updatedTables = [...prev];
|
||||||
|
const updatedFields = [
|
||||||
|
...updatedTables[props.tableData.id].fields,
|
||||||
|
];
|
||||||
|
updatedFields.splice(index, 1);
|
||||||
|
updatedTables[props.tableData.id].fields = [...updatedFields];
|
||||||
|
return updatedTables;
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
icon={<IconMinus />}
|
||||||
|
></Button>
|
||||||
|
) : (
|
||||||
|
fieldData.type
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ export default function Editor(props) {
|
|||||||
});
|
});
|
||||||
const [settings, setSettings] = useState({
|
const [settings, setSettings] = useState({
|
||||||
strictMode: false,
|
strictMode: false,
|
||||||
|
showFieldSummary: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const dragHandler = (e) => {
|
const dragHandler = (e) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user