refactor(types)!: Remove Node/TranslateExtent
* replace with CoordinateExtent Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
@@ -12,7 +12,7 @@ import {
|
|||||||
Edge,
|
Edge,
|
||||||
Elements,
|
Elements,
|
||||||
isNode,
|
isNode,
|
||||||
NodeExtent,
|
CoordinateExtent,
|
||||||
Position,
|
Position,
|
||||||
removeElements,
|
removeElements,
|
||||||
} from '~/index'
|
} from '~/index'
|
||||||
@@ -20,7 +20,7 @@ import {
|
|||||||
const dagreGraph = new dagre.graphlib.Graph()
|
const dagreGraph = new dagre.graphlib.Graph()
|
||||||
dagreGraph.setDefaultEdgeLabel(() => ({}))
|
dagreGraph.setDefaultEdgeLabel(() => ({}))
|
||||||
|
|
||||||
const nodeExtent: NodeExtent = [
|
const nodeExtent: CoordinateExtent = [
|
||||||
[0, -100],
|
[0, -100],
|
||||||
[1000, 500],
|
[1000, 500],
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,4 +1,16 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { CSSProperties } from 'vue'
|
||||||
|
import {
|
||||||
|
ConnectionLineType,
|
||||||
|
ConnectionMode,
|
||||||
|
Elements,
|
||||||
|
PanOnScrollMode,
|
||||||
|
KeyCode,
|
||||||
|
CoordinateExtent,
|
||||||
|
NodeTypes,
|
||||||
|
EdgeTypes,
|
||||||
|
FlowOptions,
|
||||||
|
} from '../../types'
|
||||||
import Renderer from '../Renderer/Renderer.vue'
|
import Renderer from '../Renderer/Renderer.vue'
|
||||||
import ZoomPane from '../ZoomPane/ZoomPane.vue'
|
import ZoomPane from '../ZoomPane/ZoomPane.vue'
|
||||||
import SelectionPane from '../SelectionPane/SelectionPane.vue'
|
import SelectionPane from '../SelectionPane/SelectionPane.vue'
|
||||||
@@ -6,7 +18,47 @@ import NodeRenderer from '../NodeRenderer/NodeRenderer.vue'
|
|||||||
import EdgeRenderer from '../EdgeRenderer/EdgeRenderer.vue'
|
import EdgeRenderer from '../EdgeRenderer/EdgeRenderer.vue'
|
||||||
import LoadingIndicator from '../../components/Loading/LoadingIndicator.vue'
|
import LoadingIndicator from '../../components/Loading/LoadingIndicator.vue'
|
||||||
import { createHooks, initFlow } from '../../composables'
|
import { createHooks, initFlow } from '../../composables'
|
||||||
import type { FlowProps } from '../../types/flow'
|
|
||||||
|
interface FlowProps extends FlowOptions {
|
||||||
|
id?: string
|
||||||
|
modelValue?: Elements
|
||||||
|
nodeTypes?: NodeTypes
|
||||||
|
edgeTypes?: EdgeTypes
|
||||||
|
connectionMode?: ConnectionMode
|
||||||
|
connectionLineType?: ConnectionLineType
|
||||||
|
connectionLineStyle?: CSSProperties
|
||||||
|
deleteKeyCode?: KeyCode
|
||||||
|
selectionKeyCode?: KeyCode
|
||||||
|
multiSelectionKeyCode?: KeyCode
|
||||||
|
zoomActivationKeyCode?: KeyCode
|
||||||
|
preventScrolling?: boolean
|
||||||
|
snapToGrid?: boolean
|
||||||
|
snapGrid?: [number, number]
|
||||||
|
onlyRenderVisibleElements?: boolean
|
||||||
|
edgesUpdatable?: boolean
|
||||||
|
nodesDraggable?: boolean
|
||||||
|
nodesConnectable?: boolean
|
||||||
|
elementsSelectable?: boolean
|
||||||
|
selectNodesOnDrag?: boolean
|
||||||
|
paneMoveable?: boolean
|
||||||
|
minZoom?: number
|
||||||
|
maxZoom?: number
|
||||||
|
defaultZoom?: number
|
||||||
|
defaultPosition?: [number, number]
|
||||||
|
translateExtent?: CoordinateExtent
|
||||||
|
nodeExtent?: CoordinateExtent
|
||||||
|
arrowHeadColor?: string
|
||||||
|
markerEndId?: string
|
||||||
|
zoomOnScroll?: boolean
|
||||||
|
zoomOnPinch?: boolean
|
||||||
|
panOnScroll?: boolean
|
||||||
|
panOnScrollSpeed?: number
|
||||||
|
panOnScrollMode?: PanOnScrollMode
|
||||||
|
zoomOnDoubleClick?: boolean
|
||||||
|
edgeUpdaterRadius?: number
|
||||||
|
storageKey?: string
|
||||||
|
loading?: string
|
||||||
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<FlowProps>(), {
|
const props = withDefaults(defineProps<FlowProps>(), {
|
||||||
modelValue: () => [],
|
modelValue: () => [],
|
||||||
|
|||||||
+44
-3
@@ -1,8 +1,9 @@
|
|||||||
import { Component, CSSProperties, DefineComponent } from 'vue'
|
import { Component, CSSProperties, DefineComponent } from 'vue'
|
||||||
import { BackgroundVariant, Dimensions, ElementId, FitViewParams, Position, XYPosition } from './flow'
|
import { BackgroundVariant, Dimensions, ElementId, Elements, FitViewParams, FlowOptions, Position, XYPosition } from './flow'
|
||||||
import { Connection, ConnectionLineType } from './connection'
|
import { Connection, ConnectionLineType, ConnectionMode } from './connection'
|
||||||
import { GraphNode, Node, NodeProps } from './node'
|
import { GraphNode, Node, NodeProps, CoordinateExtent } from './node'
|
||||||
import { EdgeProps } from './edge'
|
import { EdgeProps } from './edge'
|
||||||
|
import { KeyCode, PanOnScrollMode } from './zoom'
|
||||||
|
|
||||||
export type DefaultEdgeTypes = { [key in 'default' | 'straight' | 'smoothstep' | 'step']: Component<EdgeProps> }
|
export type DefaultEdgeTypes = { [key in 'default' | 'straight' | 'smoothstep' | 'step']: Component<EdgeProps> }
|
||||||
export type EdgeTypes = (keyof DefaultEdgeTypes | string)[]
|
export type EdgeTypes = (keyof DefaultEdgeTypes | string)[]
|
||||||
@@ -102,3 +103,43 @@ export interface CustomConnectionLineProps {
|
|||||||
sourceNode: GraphNode
|
sourceNode: GraphNode
|
||||||
sourceHandle: HandleElement
|
sourceHandle: HandleElement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface FlowProps extends FlowOptions {
|
||||||
|
id?: string
|
||||||
|
modelValue?: Elements
|
||||||
|
nodeTypes?: NodeTypes
|
||||||
|
edgeTypes?: EdgeTypes
|
||||||
|
connectionMode?: ConnectionMode
|
||||||
|
connectionLineType?: ConnectionLineType
|
||||||
|
connectionLineStyle?: CSSProperties
|
||||||
|
deleteKeyCode?: KeyCode
|
||||||
|
selectionKeyCode?: KeyCode
|
||||||
|
multiSelectionKeyCode?: KeyCode
|
||||||
|
zoomActivationKeyCode?: KeyCode
|
||||||
|
preventScrolling?: boolean
|
||||||
|
snapToGrid?: boolean
|
||||||
|
snapGrid?: [number, number]
|
||||||
|
onlyRenderVisibleElements?: boolean
|
||||||
|
nodesDraggable?: boolean
|
||||||
|
nodesConnectable?: boolean
|
||||||
|
elementsSelectable?: boolean
|
||||||
|
selectNodesOnDrag?: boolean
|
||||||
|
paneMoveable?: boolean
|
||||||
|
minZoom?: number
|
||||||
|
maxZoom?: number
|
||||||
|
defaultZoom?: number
|
||||||
|
defaultPosition?: [number, number]
|
||||||
|
translateExtent?: CoordinateExtent
|
||||||
|
nodeExtent?: CoordinateExtent
|
||||||
|
arrowHeadColor?: string
|
||||||
|
markerEndId?: string
|
||||||
|
zoomOnScroll?: boolean
|
||||||
|
zoomOnPinch?: boolean
|
||||||
|
panOnScroll?: boolean
|
||||||
|
panOnScrollSpeed?: number
|
||||||
|
panOnScrollMode?: PanOnScrollMode
|
||||||
|
zoomOnDoubleClick?: boolean
|
||||||
|
edgeUpdaterRadius?: number
|
||||||
|
storageKey?: string
|
||||||
|
loading?: string
|
||||||
|
}
|
||||||
|
|||||||
+5
-12
@@ -1,6 +1,6 @@
|
|||||||
import { CSSProperties } from 'vue'
|
import { CSSProperties } from 'vue'
|
||||||
import { Edge, GraphEdge } from './edge'
|
import { Edge, GraphEdge } from './edge'
|
||||||
import { GraphNode, Node } from './node'
|
import { GraphNode, Node, CoordinateExtent } from './node'
|
||||||
import { ConnectionLineType, ConnectionMode } from './connection'
|
import { ConnectionLineType, ConnectionMode } from './connection'
|
||||||
import { KeyCode, PanOnScrollMode } from './zoom'
|
import { KeyCode, PanOnScrollMode } from './zoom'
|
||||||
import { EdgeTypes, NodeTypes } from './components'
|
import { EdgeTypes, NodeTypes } from './components'
|
||||||
@@ -15,9 +15,6 @@ export type NextElements = {
|
|||||||
edges: GraphEdge[]
|
edges: GraphEdge[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TranslateExtent = [[number, number], [number, number]]
|
|
||||||
export type NodeExtent = [[number, number], [number, number]]
|
|
||||||
|
|
||||||
export type Transform = [number, number, number]
|
export type Transform = [number, number, number]
|
||||||
|
|
||||||
export enum Position {
|
export enum Position {
|
||||||
@@ -102,9 +99,9 @@ export type FlowInstance<T = any> = {
|
|||||||
toObject: ToObjectFunc<T>
|
toObject: ToObjectFunc<T>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FlowProps {
|
export interface FlowOptions {
|
||||||
modelValue?: Elements
|
|
||||||
id?: string
|
id?: string
|
||||||
|
elements?: Elements
|
||||||
nodeTypes?: NodeTypes
|
nodeTypes?: NodeTypes
|
||||||
edgeTypes?: EdgeTypes
|
edgeTypes?: EdgeTypes
|
||||||
connectionMode?: ConnectionMode
|
connectionMode?: ConnectionMode
|
||||||
@@ -127,8 +124,8 @@ export interface FlowProps {
|
|||||||
maxZoom?: number
|
maxZoom?: number
|
||||||
defaultZoom?: number
|
defaultZoom?: number
|
||||||
defaultPosition?: [number, number]
|
defaultPosition?: [number, number]
|
||||||
translateExtent?: TranslateExtent
|
translateExtent?: CoordinateExtent
|
||||||
nodeExtent?: NodeExtent
|
nodeExtent?: CoordinateExtent
|
||||||
arrowHeadColor?: string
|
arrowHeadColor?: string
|
||||||
markerEndId?: string
|
markerEndId?: string
|
||||||
zoomOnScroll?: boolean
|
zoomOnScroll?: boolean
|
||||||
@@ -142,7 +139,3 @@ export interface FlowProps {
|
|||||||
storageKey?: string
|
storageKey?: string
|
||||||
loading?: string
|
loading?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FlowOptions extends Omit<FlowProps, 'modelValue'> {
|
|
||||||
elements?: Elements
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ export interface NodeProps<T = any> extends GraphNode {
|
|||||||
__vf: VFInternals
|
__vf: VFInternals
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CoordinateExtent = [[number, number], [number, number]]
|
||||||
|
|
||||||
export type NodeDimensionUpdate = {
|
export type NodeDimensionUpdate = {
|
||||||
id: ElementId
|
id: ElementId
|
||||||
nodeElement: HTMLDivElement
|
nodeElement: HTMLDivElement
|
||||||
|
|||||||
+4
-6
@@ -7,18 +7,16 @@ import {
|
|||||||
FlowElements,
|
FlowElements,
|
||||||
FlowInstance,
|
FlowInstance,
|
||||||
FlowOptions,
|
FlowOptions,
|
||||||
NodeExtent,
|
|
||||||
Rect,
|
Rect,
|
||||||
SelectionRect,
|
SelectionRect,
|
||||||
SnapGrid,
|
SnapGrid,
|
||||||
Transform,
|
Transform,
|
||||||
TranslateExtent,
|
|
||||||
XYPosition,
|
XYPosition,
|
||||||
} from './flow'
|
} from './flow'
|
||||||
import { HandleType, EdgeComponent, NodeComponent, NodeTypes, EdgeTypes } from './components'
|
import { HandleType, EdgeComponent, NodeComponent, NodeTypes, EdgeTypes } from './components'
|
||||||
import { ConnectionLineType, ConnectionMode, SetConnectionId } from './connection'
|
import { ConnectionLineType, ConnectionMode, SetConnectionId } from './connection'
|
||||||
import { GraphEdge } from './edge'
|
import { GraphEdge } from './edge'
|
||||||
import { GraphNode } from './node'
|
import { GraphNode, CoordinateExtent } from './node'
|
||||||
import { D3Selection, D3Zoom, D3ZoomHandler, InitD3ZoomPayload, KeyCode, PanOnScrollMode } from './zoom'
|
import { D3Selection, D3Zoom, D3ZoomHandler, InitD3ZoomPayload, KeyCode, PanOnScrollMode } from './zoom'
|
||||||
import { FlowHooks } from './hooks'
|
import { FlowHooks } from './hooks'
|
||||||
|
|
||||||
@@ -36,8 +34,8 @@ export interface FlowState extends Omit<FlowOptions, 'elements' | 'id'> {
|
|||||||
minZoom: number
|
minZoom: number
|
||||||
maxZoom: number
|
maxZoom: number
|
||||||
defaultZoom: number
|
defaultZoom: number
|
||||||
translateExtent: TranslateExtent
|
translateExtent: CoordinateExtent
|
||||||
nodeExtent: NodeExtent
|
nodeExtent: CoordinateExtent
|
||||||
dimensions: Dimensions
|
dimensions: Dimensions
|
||||||
transform: Transform
|
transform: Transform
|
||||||
onlyRenderVisibleElements: boolean
|
onlyRenderVisibleElements: boolean
|
||||||
@@ -94,7 +92,7 @@ export interface FlowActions {
|
|||||||
initD3Zoom: (payload: InitD3ZoomPayload) => void
|
initD3Zoom: (payload: InitD3ZoomPayload) => void
|
||||||
setMinZoom: (zoom: number) => void
|
setMinZoom: (zoom: number) => void
|
||||||
setMaxZoom: (zoom: number) => void
|
setMaxZoom: (zoom: number) => void
|
||||||
setTranslateExtent: (translateExtent: TranslateExtent) => void
|
setTranslateExtent: (translateExtent: CoordinateExtent) => void
|
||||||
resetSelectedElements: () => void
|
resetSelectedElements: () => void
|
||||||
unsetNodesSelection: () => void
|
unsetNodesSelection: () => void
|
||||||
updateSize: (size: Dimensions) => void
|
updateSize: (size: Dimensions) => void
|
||||||
|
|||||||
+5
-5
@@ -10,7 +10,7 @@ import {
|
|||||||
Box,
|
Box,
|
||||||
Connection,
|
Connection,
|
||||||
FlowExportObject,
|
FlowExportObject,
|
||||||
NodeExtent,
|
CoordinateExtent,
|
||||||
Dimensions,
|
Dimensions,
|
||||||
GraphNode,
|
GraphNode,
|
||||||
FlowElements,
|
FlowElements,
|
||||||
@@ -38,7 +38,7 @@ export const getDimensions = (node: HTMLElement): Dimensions => ({
|
|||||||
|
|
||||||
export const clamp = (val: number, min = 0, max = 1): number => Math.min(Math.max(val, min), max)
|
export const clamp = (val: number, min = 0, max = 1): number => Math.min(Math.max(val, min), max)
|
||||||
|
|
||||||
export const clampPosition = (position: XYPosition, extent: NodeExtent): XYPosition => ({
|
export const clampPosition = (position: XYPosition, extent: CoordinateExtent): XYPosition => ({
|
||||||
x: clamp(position.x, extent[0][0], extent[1][0]),
|
x: clamp(position.x, extent[0][0], extent[1][0]),
|
||||||
y: clamp(position.y, extent[0][1], extent[1][1]),
|
y: clamp(position.y, extent[0][1], extent[1][1]),
|
||||||
})
|
})
|
||||||
@@ -165,7 +165,7 @@ export const pointToRendererPoint = (
|
|||||||
export const onLoadProject = (currentStore: FlowStore) => (position: XYPosition) =>
|
export const onLoadProject = (currentStore: FlowStore) => (position: XYPosition) =>
|
||||||
pointToRendererPoint(position, currentStore.transform, currentStore.snapToGrid, currentStore.snapGrid)
|
pointToRendererPoint(position, currentStore.transform, currentStore.snapToGrid, currentStore.snapGrid)
|
||||||
|
|
||||||
export const parseNode = (node: Node, nodeExtent: NodeExtent): GraphNode => ({
|
export const parseNode = (node: Node, nodeExtent: CoordinateExtent): GraphNode => ({
|
||||||
...node,
|
...node,
|
||||||
id: node.id.toString(),
|
id: node.id.toString(),
|
||||||
type: node.type ?? 'default',
|
type: node.type ?? 'default',
|
||||||
@@ -334,7 +334,7 @@ export const processElements = (elements: FlowElements, fn: (elements: FlowEleme
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const parseElement = (element: Node | Edge, prevElements: FlowElements, nodeExtent: NodeExtent) => {
|
export const parseElement = (element: Node | Edge, prevElements: FlowElements, nodeExtent: CoordinateExtent) => {
|
||||||
let parsed: GraphEdge | GraphNode = {} as any
|
let parsed: GraphEdge | GraphNode = {} as any
|
||||||
const index = prevElements.map((x) => x.id).indexOf(element.id)
|
const index = prevElements.map((x) => x.id).indexOf(element.id)
|
||||||
if (isNode(element)) {
|
if (isNode(element)) {
|
||||||
@@ -371,7 +371,7 @@ export const parseElement = (element: Node | Edge, prevElements: FlowElements, n
|
|||||||
return { parsed, index }
|
return { parsed, index }
|
||||||
}
|
}
|
||||||
|
|
||||||
export const parseElements = (elements: Elements, prevElements: FlowElements, nodeExtent: NodeExtent) => {
|
export const parseElements = (elements: Elements, prevElements: FlowElements, nodeExtent: CoordinateExtent) => {
|
||||||
const { nodes, edges }: NextElements = {
|
const { nodes, edges }: NextElements = {
|
||||||
nodes: [],
|
nodes: [],
|
||||||
edges: [],
|
edges: [],
|
||||||
|
|||||||
Reference in New Issue
Block a user