2
0

(editor) Actions on multiple groups

You can now select groups, move, copy, delete them easily

Closes #830, closes #1092
This commit is contained in:
Baptiste Arnaud
2024-01-23 10:31:31 +01:00
parent c08ab3d007
commit 00dcb135f3
32 changed files with 1043 additions and 282 deletions

View File

@@ -8,18 +8,26 @@ import { Coordinates } from '@dnd-kit/utilities'
import { computeConnectingEdgePath } from '../../helpers/computeConnectingEdgePath'
import { computeEdgePathToMouse } from '../../helpers/computeEdgePathToMouth'
import { useGraph } from '../../providers/GraphProvider'
import { useGroupsCoordinates } from '../../providers/GroupsCoordinateProvider'
import { ConnectingIds } from '../../types'
import { useEventsCoordinates } from '../../providers/EventsCoordinateProvider'
import { eventWidth, groupWidth } from '../../constants'
import { useGroupsStore } from '../../hooks/useGroupsStore'
export const DrawingEdge = () => {
const { graphPosition, setConnectingIds, connectingIds } = useGraph()
type Props = {
connectingIds: ConnectingIds
}
export const DrawingEdge = ({ connectingIds }: Props) => {
const { graphPosition, setConnectingIds } = useGraph()
const {
sourceEndpointYOffsets: sourceEndpoints,
targetEndpointYOffsets: targetEndpoints,
} = useEndpoints()
const { groupsCoordinates } = useGroupsCoordinates()
const groupsCoordinates = useGroupsStore(
(state) => state.groupsCoordinates,
// Keep in cache because groups are not changing while drawing an edge
() => true
)
const { eventsCoordinates } = useEventsCoordinates()
const { createEdge } = useTypebot()
const [mousePosition, setMousePosition] = useState<Coordinates | null>(null)
@@ -27,7 +35,9 @@ export const DrawingEdge = () => {
const sourceElementCoordinates = connectingIds
? 'eventId' in connectingIds.source
? eventsCoordinates[connectingIds?.source.eventId]
: groupsCoordinates[connectingIds?.source.groupId ?? '']
: groupsCoordinates
? groupsCoordinates[connectingIds?.source.groupId ?? '']
: undefined
: undefined
const targetGroupCoordinates =
@@ -106,10 +116,7 @@ export const DrawingEdge = () => {
createEdge({ from: connectingIds.source, to: connectingIds.target })
}
if (
(mousePosition && mousePosition.x === 0 && mousePosition.y === 0) ||
!connectingIds
)
if (mousePosition && mousePosition.x === 0 && mousePosition.y === 0)
return <></>
return (
<path