diff --git a/apps/arrows-ts/src/actions/dragToCreate.js b/apps/arrows-ts/src/actions/dragToCreate.ts
similarity index 95%
rename from apps/arrows-ts/src/actions/dragToCreate.js
rename to apps/arrows-ts/src/actions/dragToCreate.ts
index 97aa3f5a..173005bb 100644
--- a/apps/arrows-ts/src/actions/dragToCreate.js
+++ b/apps/arrows-ts/src/actions/dragToCreate.ts
@@ -1,9 +1,9 @@
import snapToTargetNode from "./snapToTargetNode"
import {snapToDistancesAndAngles} from "./geometricSnapping"
-import {idsMatch} from "../model/Id"
+import {idsMatch} from "@neo4j-arrows/model"
import {getVisualGraph} from "../selectors"
-import {selectedNodeIds} from "../model/selection";
-import {Guides} from "../model/guides/guides";
+import {selectedNodeIds} from "@neo4j-arrows/model";
+import {Guides} from "@neo4j-arrows/model";
export const activateRing = (sourceNodeId, nodeType) => {
return {
diff --git a/apps/arrows-ts/src/actions/export.js b/apps/arrows-ts/src/actions/export.ts
similarity index 75%
rename from apps/arrows-ts/src/actions/export.js
rename to apps/arrows-ts/src/actions/export.ts
index 559b8a16..83b4f406 100644
--- a/apps/arrows-ts/src/actions/export.js
+++ b/apps/arrows-ts/src/actions/export.ts
@@ -1,8 +1,9 @@
import {getPresentGraph} from "../selectors";
-import {selectedNodes, selectedRelationships} from "../model/selection";
+import {selectedNodes, selectedRelationships} from "@neo4j-arrows/model";
+import { DispatchFunction, ImpureFunction } from "../type-patches";
export const handleCopy = () => {
- return function (dispatch, getState) {
+ return function (dispatch:DispatchFunction, getState:ImpureFunction) {
const state = getState()
const graph = getPresentGraph(state)
const nodes = selectedNodes(graph, state.selection)
diff --git a/apps/arrows-ts/src/actions/gang.js b/apps/arrows-ts/src/actions/gang.ts
similarity index 91%
rename from apps/arrows-ts/src/actions/gang.js
rename to apps/arrows-ts/src/actions/gang.ts
index 7e5ce752..f51c5292 100644
--- a/apps/arrows-ts/src/actions/gang.js
+++ b/apps/arrows-ts/src/actions/gang.ts
@@ -1,12 +1,13 @@
-import { getCommonCaption } from "../model/gang"
-import { idsMatch, nextAvailableId } from "../model/Id"
+import { getCommonCaption } from "@neo4j-arrows/model"
+import { idsMatch, nextAvailableId } from "@neo4j-arrows/model"
import { moveNodes } from "./graph"
import { clearSelection } from "./selection";
import { getGraph, getPositionsOfSelectedNodes, getPresentGraph } from "../selectors";
-import {nodeSelected} from "../model/selection";
-import {Guides} from "../model/guides/guides";
+import {nodeSelected} from "@neo4j-arrows/model";
+import {Guides} from "@neo4j-arrows/model";
+import { DispatchFunction, ImpureFunction } from "../type-patches";
-export const createClusterGang = (nodePositions, initialPositions) => (dispatch, getState) => {
+export const createClusterGang = (nodePositions, initialPositions) => (dispatch:DispatchFunction, getState:ImpureFunction) => {
const state = getState()
const graph = getPresentGraph(state)
const combinedNodeIds = nodePositions.map(nodePos => nodePos.nodeId)
diff --git a/apps/arrows-ts/src/actions/geometricSnapping.js b/apps/arrows-ts/src/actions/geometricSnapping.js
index e5921175..f8660729 100644
--- a/apps/arrows-ts/src/actions/geometricSnapping.js
+++ b/apps/arrows-ts/src/actions/geometricSnapping.js
@@ -1,9 +1,9 @@
-import {Point} from "../model/Point";
-import {idsMatch} from "../model/Id";
-import {LineGuide} from "../model/guides/LineGuide";
-import {CircleGuide} from "../model/guides/CircleGuide";
-import {areParallel} from "../model/guides/intersections";
-import {byAscendingError} from "../model/guides/guides";
+import {Point} from "../model-old/Point";
+import {idsMatch} from "../model-old/Id";
+import {LineGuide} from "../model-old/guides/LineGuide";
+import {CircleGuide} from "../model-old/guides/CircleGuide";
+import {areParallel} from "../model-old/guides/intersections";
+import {byAscendingError} from "../model-old/guides/guides";
export const snapTolerance = 20
const grossTolerance = snapTolerance * 2
diff --git a/apps/arrows-ts/src/actions/googleDrive.js b/apps/arrows-ts/src/actions/googleDrive.js
index 03fbde59..5b86b560 100644
--- a/apps/arrows-ts/src/actions/googleDrive.js
+++ b/apps/arrows-ts/src/actions/googleDrive.js
@@ -1,7 +1,7 @@
import config from "../config";
import {googleDriveSignInStatusChanged} from "./storage";
import {renderPngForThumbnail} from "../graphics/utils/offScreenCanvasRenderer";
-import {indexableText} from "../model/Graph";
+import {indexableText} from "../model-old/Graph";
export const DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"];
export const SCOPES = 'https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.install';
diff --git a/apps/arrows-ts/src/actions/graph.js b/apps/arrows-ts/src/actions/graph.js
index 8812bdba..b51602be 100644
--- a/apps/arrows-ts/src/actions/graph.js
+++ b/apps/arrows-ts/src/actions/graph.js
@@ -1,22 +1,22 @@
import {angleTolerance, snapTolerance, snapToNeighbourDistancesAndAngles} from "./geometricSnapping";
-import {idsMatch, nextAvailableId, nextId} from "../model/Id";
-import {average, Point} from "../model/Point";
-import {Vector} from "../model/Vector";
+import {idsMatch, nextAvailableId, nextId} from "../model-old/Id";
+import {average, Point} from "../model-old/Point";
+import {Vector} from "../model-old/Vector";
import {calculateBoundingBox} from "../graphics/utils/geometryUtils";
import {getPresentGraph, getVisualGraph} from "../selectors";
import {
nodeSelected,
selectedNodeIdMap, selectedNodeIds, selectedNodes,
selectedRelationshipIdMap, selectedRelationshipIds, selectedRelationships
-} from "../model/selection";
+} from "../model-old/selection";
import {defaultNodeRadius, defaultRelationshipLength} from "../graphics/constants";
import BoundingBox from "../graphics/utils/BoundingBox";
-import {translate} from "../model/Node";
+import {translate} from "../model-old/Node";
import {lockHandleDragType} from "./mouse";
-import {CircleGuide} from "../model/guides/CircleGuide";
-import {LineGuide} from "../model/guides/LineGuide";
-import {HandleGuide} from "../model/guides/HandleGuide";
-import {Guides} from "../model/guides/guides";
+import {CircleGuide} from "../model-old/guides/CircleGuide";
+import {LineGuide} from "../model-old/guides/LineGuide";
+import {HandleGuide} from "../model-old/guides/HandleGuide";
+import {Guides} from "../model-old/guides/guides";
export const createNode = () => (dispatch, getState) => {
let newNodePosition = new Point(0, 0)
diff --git a/apps/arrows-ts/src/actions/import.js b/apps/arrows-ts/src/actions/import.js
index 44de345f..5ad15890 100644
--- a/apps/arrows-ts/src/actions/import.js
+++ b/apps/arrows-ts/src/actions/import.js
@@ -1,9 +1,9 @@
import {importNodesAndRelationships, setArrowsProperty, setGraphStyle} from "./graph";
-import {Point} from "../model/Point";
+import {Point} from "../model-old/Point";
import {getPresentGraph} from "../selectors";
import {constructGraphFromFile} from "../storage/googleDriveStorage";
-import {translate} from "../model/Node";
-import {Vector} from "../model/Vector";
+import {translate} from "../model-old/Node";
+import {Vector} from "../model-old/Vector";
import {hideImportDialog} from "./applicationDialogs";
import {shrinkImageUrl} from "../graphics/utils/resizeImage";
import {Base64} from "js-base64";
diff --git a/apps/arrows-ts/src/actions/mouse.js b/apps/arrows-ts/src/actions/mouse.ts
similarity index 79%
rename from apps/arrows-ts/src/actions/mouse.js
rename to apps/arrows-ts/src/actions/mouse.ts
index 7ec55ddc..2b650689 100644
--- a/apps/arrows-ts/src/actions/mouse.js
+++ b/apps/arrows-ts/src/actions/mouse.ts
@@ -1,18 +1,20 @@
-import {getPositionsOfSelectedNodes, getPresentGraph, getTransformationHandles, getVisualGraph} from "../selectors/"
+import {getPositionsOfSelectedNodes, getPresentGraph, getTransformationHandles, getVisualGraph} from "../selectors"
import {activateEditing, clearSelection, toggleSelection} from "./selection"
import {connectNodes, createNodesAndRelationships, moveNodesEndDrag, tryMoveHandle, tryMoveNode} from "./graph"
import {adjustViewport} from "./viewTransformation"
import {activateRing, deactivateRing, tryDragRing} from "./dragToCreate"
import {selectItemsInMarquee, setMarquee} from "./selectionMarquee"
import {getEventHandlers} from "../selectors/layers";
-import {canvasPadding, computeCanvasSize, subtractPadding} from "../model/applicationLayout";
-import {Vector} from "../model/Vector";
+import {Point, canvasPadding, computeCanvasSize, subtractPadding} from "@neo4j-arrows/model";
+import {Vector} from "@neo4j-arrows/model";
+import { DispatchFunction, FixThisType, ImpureFunction } from "../type-patches"
+import {BoundingBox, BoxSize} from "@neo4j-arrows/graphics";
-const toGraphPosition = (state, canvasPosition) => state.viewTransformation.inverse(canvasPosition)
+const toGraphPosition = (state:FixThisType, canvasPosition:Point) => state.viewTransformation.inverse(canvasPosition)
-export const wheel = (canvasPosition, vector, ctrlKey) => {
- return function (dispatch, getState) {
- const state = getState()
+export const wheel = (canvasPosition:Point, vector:Vector, ctrlKey:boolean) => {
+ return function (dispatch:DispatchFunction, getState: ImpureFunction) {
+ const state = getState()
const boundingBox = getVisualGraph(state).boundingBox()
const currentScale = state.viewTransformation.scale
const canvasSize = subtractPadding(computeCanvasSize(state.applicationLayout))
@@ -36,10 +38,10 @@ export const wheel = (canvasPosition, vector, ctrlKey) => {
}
}
-const moveTowardCenter = (minScale, offset, boundingBox, canvasSize) => {
+const moveTowardCenter = (minScale:number, offset:Vector, boundingBox:BoundingBox, canvasSize:BoxSize) => {
const dimensions = [
- {component: 'dx', min: 'left', max: 'right', extent: 'width'},
- {component: 'dy', min: 'top', max: 'bottom', extent: 'height'}
+ {component: 'dx' as const, min: 'left' as const, max: 'right' as const, extent: 'width' as const},
+ {component: 'dy' as const, min: 'top' as const, max: 'bottom' as const, extent: 'height' as const}
]
const [dx, dy] = dimensions.map(d => {
@@ -54,15 +56,15 @@ const moveTowardCenter = (minScale, offset, boundingBox, canvasSize) => {
return new Vector(dx, dy)
}
-const constrainScroll = (boundingBox, scale, effectiveOffset, canvasSize) => {
+const constrainScroll = (boundingBox:BoundingBox, scale:number, effectiveOffset:Vector, canvasSize:BoxSize) => {
const constrainedOffset = new Vector(effectiveOffset.dx, effectiveOffset.dy)
const dimensions = [
- {component: 'dx', min: 'left', max: 'right', extent: 'width'},
- {component: 'dy', min: 'top', max: 'bottom', extent: 'height'}
+ {component: 'dx' as const, min: 'left' as const, max: 'right' as const, extent: 'width' as const},
+ {component: 'dy' as const, min: 'top' as const, max: 'bottom' as const, extent: 'height' as const}
]
- const flip = (tooLarge, boundary) => {
+ const flip = (tooLarge:boolean, boundary:boolean) => {
return tooLarge ? !boundary : boundary
}
@@ -81,8 +83,8 @@ const constrainScroll = (boundingBox, scale, effectiveOffset, canvasSize) => {
return constrainedOffset
}
-export const doubleClick = (canvasPosition) => {
- return function (dispatch, getState) {
+export const doubleClick = (canvasPosition:Point) => {
+ return function (dispatch:DispatchFunction, getState: ImpureFunction) {
const state = getState()
const visualGraph = getVisualGraph(state)
const graphPosition = toGraphPosition(state, canvasPosition)
@@ -93,8 +95,8 @@ export const doubleClick = (canvasPosition) => {
}
}
-export const mouseDown = (canvasPosition, multiSelectModifierKey) => {
- return function (dispatch, getState) {
+export const mouseDown = (canvasPosition:Point, multiSelectModifierKey:boolean) => {
+ return function (dispatch:DispatchFunction, getState: ImpureFunction) {
const state = getState();
const visualGraph = getVisualGraph(state)
const transformationHandles = getTransformationHandles(state)
@@ -130,44 +132,44 @@ export const mouseDown = (canvasPosition, multiSelectModifierKey) => {
}
}
-const mouseDownOnHandle = (corner, canvasPosition, nodePositions) => ({
+const mouseDownOnHandle = (corner:Point, canvasPosition:Point, nodePositions:Point[]) => ({
type: 'MOUSE_DOWN_ON_HANDLE',
corner,
canvasPosition,
nodePositions
})
-export const lockHandleDragType = (dragType) => ({
+export const lockHandleDragType = (dragType:string) => ({
type: 'LOCK_HANDLE_DRAG_MODE',
dragType
})
-const mouseDownOnNode = (node, canvasPosition, graphPosition) => ({
+const mouseDownOnNode = (node:FixThisType, canvasPosition:Point, graphPosition:Point) => ({
type: 'MOUSE_DOWN_ON_NODE',
node,
position: canvasPosition,
graphPosition
})
-const mouseDownOnNodeRing = (node, canvasPosition) => ({
+const mouseDownOnNodeRing = (node:FixThisType, canvasPosition:Point) => ({
type: 'MOUSE_DOWN_ON_NODE_RING',
node,
position: canvasPosition
})
-const mouseDownOnCanvas = (canvasPosition, graphPosition) => ({
+const mouseDownOnCanvas = (canvasPosition:Point, graphPosition:Point) => ({
type: 'MOUSE_DOWN_ON_CANVAS',
canvasPosition,
graphPosition
})
-const furtherThanDragThreshold = (previousPosition, newPosition) => {
+const furtherThanDragThreshold = (previousPosition:Point, newPosition:Point) => {
const movementDelta = newPosition.vectorFrom(previousPosition)
return movementDelta.distance() >= 3
}
-export const mouseMove = (canvasPosition) => {
- return function (dispatch, getState) {
+export const mouseMove = (canvasPosition:Point) => {
+ return function (dispatch:DispatchFunction, getState:ImpureFunction) {
const state = getState();
const visualGraph = getVisualGraph(state)
const graphPosition = toGraphPosition(state, canvasPosition)
diff --git a/apps/arrows-ts/src/actions/selection.js b/apps/arrows-ts/src/actions/selection.js
index ebf7c93d..4da6dded 100644
--- a/apps/arrows-ts/src/actions/selection.js
+++ b/apps/arrows-ts/src/actions/selection.js
@@ -1,5 +1,5 @@
import { getPresentGraph } from "../selectors"
-import {nodeSelected, selectedNodeIds} from "../model/selection";
+import {nodeSelected, selectedNodeIds} from "../model-old/selection";
export const activateEditing = (entity) => ({
type: 'ACTIVATE_EDITING',
diff --git a/apps/arrows-ts/src/actions/snapToTargetNode.js b/apps/arrows-ts/src/actions/snapToTargetNode.js
index be0b78e1..9dd0ee99 100644
--- a/apps/arrows-ts/src/actions/snapToTargetNode.js
+++ b/apps/arrows-ts/src/actions/snapToTargetNode.js
@@ -1,4 +1,4 @@
-import {idsMatch} from "../model/Id";
+import {idsMatch} from "../model-old/Id";
const snapToTargetNode = (visualGraph, excludedNodeId, naturalPosition) => {
const targetNode = visualGraph.closestNode(naturalPosition, (visualNode, distance) => {
diff --git a/apps/arrows-ts/src/app/App.jsx b/apps/arrows-ts/src/app/App.jsx
deleted file mode 100644
index 9a2941c3..00000000
--- a/apps/arrows-ts/src/app/App.jsx
+++ /dev/null
@@ -1,151 +0,0 @@
-import React, {Component} from 'react'
-import GraphContainer from "../containers/GraphContainer"
-import {connect} from 'react-redux'
-import withKeybindings, { ignoreTarget } from '../interactions/Keybindings'
-import {windowResized} from "../actions/applicationLayout"
-import { compose } from 'react-recompose'
-import HeaderContainer from '../containers/HeaderContainer'
-import InspectorChooser from "../containers/InspectorChooser"
-import {computeCanvasSize, inspectorWidth} from "../model/applicationLayout";
-import ExportContainer from "../containers/ExportContainer";
-import GoogleSignInModal from "../components/editors/GoogleSignInModal";
-import HelpModal from "../components/HelpModal";
-import GoogleDrivePicker from '../components/GoogleDrivePickerWrapper'
-import {getFileFromGoogleDrive, pickDiagramCancel} from "../actions/storage"
-import FooterContainer from "../containers/FooterContainer";
-import LocalStoragePickerContainer from "../containers/LocalStoragePickerContainer";
-import SaveAsContainer from "../containers/SaveAsContainer";
-import ImportContainer from "../containers/ImportContainer";
-import {handlePaste} from "../actions/import";
-import {handleCopy} from "../actions/export";
-import {linkToGoogleFontsCss} from "../graphics/utils/fontWrangling";
-import {handleImportMessage} from "../reducers/storage";
-
-import './App.css'
-
-class App extends Component {
- constructor (props) {
- super(props)
- linkToGoogleFontsCss()
- window.addEventListener('keydown', this.fireKeyboardShortcutAction.bind(this))
- window.addEventListener('copy', this.handleCopy.bind(this))
- window.addEventListener('paste', this.handlePaste.bind(this))
- window.addEventListener('message', this.handleMessage.bind(this))
- }
-
- render() {
- const {
- inspectorVisible,
- showSaveAsDialog,
- showExportDialog,
- showImportDialog,
- pickingFromGoogleDrive,
- pickingFromLocalStorage,
- onCancelPicker,
- loadFromGoogleDrive
- } = this.props
-
- const saveAsModal = showSaveAsDialog ? (