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 ? () : null - const exportModal = showExportDialog ? () : null - const importModal = showImportDialog ? () : null - const googleDriveModal = pickingFromGoogleDrive ? : null - const localStorageModal = pickingFromLocalStorage ? : null - - const inspector = inspectorVisible ? ( - - ) : null - - return ( -
- {saveAsModal} - {exportModal} - {importModal} - {googleDriveModal} - {localStorageModal} - - - -
- - {inspector} -
- -
- ); - } - - fireKeyboardShortcutAction(ev) { - if (ignoreTarget(ev)) return - - const handled = this.props.fireAction(ev) - if (handled) { - ev.preventDefault() - ev.stopPropagation() - } - } - - handleCopy(ev) { - if (ignoreTarget(ev)) return - this.props.handleCopy(ev) - } - - handlePaste(ev) { - if (ignoreTarget(ev)) return - this.props.handlePaste(ev) - } - - handleMessage(ev) { - this.props.handleImportMessage(ev) - } - - componentDidMount() { - window.addEventListener('resize', this.props.onWindowResized) - } -} - -const mapStateToProps = (state) => ({ - inspectorVisible: state.applicationLayout.inspectorVisible, - canvasHeight: computeCanvasSize(state.applicationLayout).height, - pickingFromGoogleDrive: state.storage.status === 'PICKING_FROM_GOOGLE_DRIVE', - pickingFromLocalStorage: state.storage.status === 'PICKING_FROM_LOCAL_STORAGE', - showSaveAsDialog: state.applicationDialogs.showSaveAsDialog, - showExportDialog: state.applicationDialogs.showExportDialog, - showImportDialog: state.applicationDialogs.showImportDialog -}) - - -const mapDispatchToProps = dispatch => { - return { - onWindowResized: () => dispatch(windowResized(window.innerWidth, window.innerHeight)), - onCancelPicker: () => dispatch(pickDiagramCancel()), - loadFromGoogleDrive: fileId => dispatch(getFileFromGoogleDrive(fileId)), - handleCopy: () => dispatch(handleCopy()), - handlePaste: clipboardEvent => dispatch(handlePaste(clipboardEvent)), - handleImportMessage: message => dispatch(handleImportMessage(message)) - } -} - -export default compose( - connect(mapStateToProps, mapDispatchToProps), - withKeybindings -)(App) diff --git a/apps/arrows-ts/src/app/app.module.css b/apps/arrows-ts/src/app/app.module.css deleted file mode 100644 index 7b88fbab..00000000 --- a/apps/arrows-ts/src/app/app.module.css +++ /dev/null @@ -1 +0,0 @@ -/* Your styles goes here. */ diff --git a/apps/arrows-ts/src/app/app.notsx b/apps/arrows-ts/src/app/app.notsx index 19f594b5..1b2acf48 100644 --- a/apps/arrows-ts/src/app/app.notsx +++ b/apps/arrows-ts/src/app/app.notsx @@ -1,14 +1,168 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import styles from './app.module.css'; +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 "@neo4j-arrows/model"; +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 NxWelcome from './nx-welcome'; +import './App.css' -export function App() { - return ( -
- -
- ); +export interface AppProps { + inspectorVisible:boolean; + showSaveAsDialog:boolean; + showExportDialog:boolean; + showImportDialog:boolean; + pickingFromGoogleDrive:boolean; + pickingFromLocalStorage:boolean; + onCancelPicker:any; + loadFromGoogleDrive:any; + canvasHeight:number; + fireAction:any; + handleCopy: (ev:ClipboardEvent) => void; + handlePaste: (ev:ClipboardEvent) => void; + handleImportMessage: (ev:MessageEvent) => void; + onWindowResized: (this: Window, ev: UIEvent) => any } -export default App; +class App extends Component { + constructor (props:AppProps) { + 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 ? () : null + const exportModal = showExportDialog ? () : null + const importModal = showImportDialog ? () : null + const googleDriveModal = pickingFromGoogleDrive ? : null + const localStorageModal = pickingFromLocalStorage ? : null + + const inspector = inspectorVisible ? ( + + ) : null + + return ( +
+ {saveAsModal} + {exportModal} + {importModal} + {googleDriveModal} + {localStorageModal} + + + +
+ + {inspector} +
+ +
+ ); + } + + fireKeyboardShortcutAction(ev:KeyboardEvent) { + if (ignoreTarget(ev)) return + + const handled = this.props.fireAction(ev) + if (handled) { + ev.preventDefault() + ev.stopPropagation() + } + } + + handleCopy(ev:ClipboardEvent) { + if (ignoreTarget(ev)) return + this.props.handleCopy(ev) + } + + handlePaste(ev:ClipboardEvent) { + if (ignoreTarget(ev)) return + this.props.handlePaste(ev) + } + + handleMessage(ev:MessageEvent) { + this.props.handleImportMessage(ev) + } + + componentDidMount() { + window.addEventListener('resize', this.props.onWindowResized) + } +} + +const mapStateToProps = (state:any) => ({ + inspectorVisible: state.applicationLayout.inspectorVisible, + canvasHeight: computeCanvasSize(state.applicationLayout).height, + pickingFromGoogleDrive: state.storage.status === 'PICKING_FROM_GOOGLE_DRIVE', + pickingFromLocalStorage: state.storage.status === 'PICKING_FROM_LOCAL_STORAGE', + showSaveAsDialog: state.applicationDialogs.showSaveAsDialog, + showExportDialog: state.applicationDialogs.showExportDialog, + showImportDialog: state.applicationDialogs.showImportDialog +}) + + +const mapDispatchToProps = (dispatch:any) => { + return { + onWindowResized: () => dispatch(windowResized(window.innerWidth, window.innerHeight)), + onCancelPicker: () => dispatch(pickDiagramCancel()), + loadFromGoogleDrive: (fileId:any) => dispatch(getFileFromGoogleDrive(fileId)), + handleCopy: () => dispatch(handleCopy()), + handlePaste: (clipboardEvent:any) => dispatch(handlePaste(clipboardEvent)), + handleImportMessage: (message:any) => dispatch(handleImportMessage(message)) + } +} + +export default compose( + connect(mapStateToProps, mapDispatchToProps), + withKeybindings +)(App) diff --git a/apps/arrows-ts/src/app/nx-welcome.tsx b/apps/arrows-ts/src/app/nx-welcome.tsx deleted file mode 100644 index f0cd657b..00000000 --- a/apps/arrows-ts/src/app/nx-welcome.tsx +++ /dev/null @@ -1,845 +0,0 @@ -/* - * * * * * * * * * * * * * * * * * * * * * * * * * * * * - This is a starter component and can be deleted. - * * * * * * * * * * * * * * * * * * * * * * * * * * * * - Delete this file and get started with your project! - * * * * * * * * * * * * * * * * * * * * * * * * * * * * - */ -export function NxWelcome({ title }: { title: string }) { - return ( - <> -