mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-21 19:56:02 +00:00
reference line
This commit is contained in:
@@ -3,6 +3,7 @@ import styled from 'styled-components';
|
|||||||
import DesignerTable from './DesignerTable';
|
import DesignerTable from './DesignerTable';
|
||||||
import uuidv1 from 'uuid/v1';
|
import uuidv1 from 'uuid/v1';
|
||||||
import useTheme from '../theme/useTheme';
|
import useTheme from '../theme/useTheme';
|
||||||
|
import DesignerReference from './DesignerReference';
|
||||||
|
|
||||||
const Wrapper = styled.div`
|
const Wrapper = styled.div`
|
||||||
flex: 1;
|
flex: 1;
|
||||||
@@ -10,7 +11,7 @@ const Wrapper = styled.div`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
export default function Designer({ value, onChange }) {
|
export default function Designer({ value, onChange }) {
|
||||||
const { tables } = value || {};
|
const { tables, references } = value || {};
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
const [sourceDragColumn, setSourceDragColumn] = React.useState(null);
|
const [sourceDragColumn, setSourceDragColumn] = React.useState(null);
|
||||||
@@ -66,8 +67,27 @@ export default function Designer({ value, onChange }) {
|
|||||||
[onChange, value]
|
[onChange, value]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handleCreateReference = (source, target) => {
|
||||||
|
const newValue = {
|
||||||
|
...value,
|
||||||
|
references: [
|
||||||
|
...(value.references || []),
|
||||||
|
{
|
||||||
|
designerId: uuidv1(),
|
||||||
|
source,
|
||||||
|
target,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
onChange(newValue);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Wrapper onDragOver={(e) => e.preventDefault()} onDrop={handleDrop} theme={theme}>
|
<Wrapper onDragOver={(e) => e.preventDefault()} onDrop={handleDrop} theme={theme}>
|
||||||
|
{(references || []).map((ref) => (
|
||||||
|
<DesignerReference key={ref.designerId} tables={tables} {...ref} />
|
||||||
|
))}
|
||||||
{(tables || []).map((table) => (
|
{(tables || []).map((table) => (
|
||||||
<DesignerTable
|
<DesignerTable
|
||||||
key={table.designerId}
|
key={table.designerId}
|
||||||
@@ -75,6 +95,7 @@ export default function Designer({ value, onChange }) {
|
|||||||
setSourceDragColumn={setSourceDragColumn}
|
setSourceDragColumn={setSourceDragColumn}
|
||||||
targetDragColumn={targetDragColumn}
|
targetDragColumn={targetDragColumn}
|
||||||
setTargetDragColumn={setTargetDragColumn}
|
setTargetDragColumn={setTargetDragColumn}
|
||||||
|
onCreateReference={handleCreateReference}
|
||||||
table={table}
|
table={table}
|
||||||
onChangeTable={changeTable}
|
onChangeTable={changeTable}
|
||||||
onBringToFront={bringToFront}
|
onBringToFront={bringToFront}
|
||||||
|
|||||||
31
packages/web/src/designer/DesignerReference.js
Normal file
31
packages/web/src/designer/DesignerReference.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import styled from 'styled-components';
|
||||||
|
|
||||||
|
const StyledSvg = styled.svg`
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
`;
|
||||||
|
|
||||||
|
export default function DesignerReference({ tables, designerId, source, target }) {
|
||||||
|
const sourceTable = tables.find((x) => x.designerId == source.designerId);
|
||||||
|
const targetTable = tables.find((x) => x.designerId == target.designerId);
|
||||||
|
if (!sourceTable || !targetTable) return null;
|
||||||
|
console.log('LINE', sourceTable.left, sourceTable.top, targetTable.left, targetTable.top);
|
||||||
|
return (
|
||||||
|
<StyledSvg>
|
||||||
|
<line
|
||||||
|
x1={sourceTable.left}
|
||||||
|
y1={sourceTable.top}
|
||||||
|
x2={targetTable.left}
|
||||||
|
y2={targetTable.top}
|
||||||
|
style={{ stroke: 'rgb(255,0,0)', strokeWidth: 2 }}
|
||||||
|
/>
|
||||||
|
</StyledSvg>
|
||||||
|
);
|
||||||
|
// return <div>{source.columnName}</div>;
|
||||||
|
}
|
||||||
@@ -82,6 +82,7 @@ export default function DesignerTable({
|
|||||||
onChangeTable,
|
onChangeTable,
|
||||||
onBringToFront,
|
onBringToFront,
|
||||||
onRemoveTable,
|
onRemoveTable,
|
||||||
|
onCreateReference,
|
||||||
sourceDragColumn,
|
sourceDragColumn,
|
||||||
setSourceDragColumn,
|
setSourceDragColumn,
|
||||||
targetDragColumn,
|
targetDragColumn,
|
||||||
@@ -213,6 +214,7 @@ export default function DesignerTable({
|
|||||||
var data = e.dataTransfer.getData('designer_column_drag_data');
|
var data = e.dataTransfer.getData('designer_column_drag_data');
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (!data) return;
|
if (!data) return;
|
||||||
|
onCreateReference(sourceDragColumn, targetDragColumn);
|
||||||
setTargetDragColumn(null);
|
setTargetDragColumn(null);
|
||||||
setSourceDragColumn(null);
|
setSourceDragColumn(null);
|
||||||
}}
|
}}
|
||||||
|
|||||||
Reference in New Issue
Block a user