diff --git a/app/client/package.json b/app/client/package.json
index 8906cbfbeb..bfcb0700e6 100644
--- a/app/client/package.json
+++ b/app/client/package.json
@@ -26,8 +26,8 @@
"normalizr": "^3.3.0",
"prettier": "^1.16.0",
"react": "^16.7.0",
- "react-dnd": "^7.0.2",
- "react-dnd-html5-backend": "^7.0.2",
+ "react-dnd": "^7.4.3",
+ "react-dnd-html5-backend": "^7.4.0",
"react-dom": "^16.7.0",
"react-redux": "^6.0.0",
"react-router": "^4.3.1",
diff --git a/app/client/src/App.tsx b/app/client/src/App.tsx
index 6bc48f5081..bf256f0bb1 100755
--- a/app/client/src/App.tsx
+++ b/app/client/src/App.tsx
@@ -1,29 +1,29 @@
-import React, { Component } from "react";
-import logo from "./assets/images/logo.svg";
-import "./App.css";
-import "../node_modules/@blueprintjs/core/src/blueprint.scss";
+import React, { Component } from "react"
+import logo from "./assets/images/logo.svg"
+import "./App.css"
+import "../node_modules/@blueprintjs/core/src/blueprint.scss"
class App extends Component {
render() {
return (
-
- );
+
+ )
}
}
-export default App;
+export default App
diff --git a/app/client/src/index.tsx b/app/client/src/index.tsx
index acdfb89eea..6346822212 100755
--- a/app/client/src/index.tsx
+++ b/app/client/src/index.tsx
@@ -15,12 +15,17 @@ import createSagaMiddleware from 'redux-saga'
import { rootSaga } from "./sagas"
import { ActionType, ReduxAction } from "./constants/ActionConstants";
+import { DragDropContextProvider } from "react-dnd"
+import HTML5Backend from "react-dnd-html5-backend"
+
WidgetBuilderRegistry.registerWidgetBuilders();
const sagaMiddleware = createSagaMiddleware()
const store = createStore(appReducer, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(rootSaga)
ReactDOM.render(
+
+
@@ -31,7 +36,7 @@ ReactDOM.render(
- ,
+ ,
document.getElementById("root")
);
diff --git a/app/client/src/pages/Editor/Canvas.tsx b/app/client/src/pages/Editor/Canvas.tsx
index 52bd51da74..ae2090029e 100644
--- a/app/client/src/pages/Editor/Canvas.tsx
+++ b/app/client/src/pages/Editor/Canvas.tsx
@@ -2,13 +2,18 @@ import React, { Component } from "react"
import { connect } from "react-redux"
import { AppState } from "../../reducers"
import WidgetFactory from "../../utils/WidgetFactory"
-import CanvasWidgetsNormalizer, { widgetSchema } from "../../normalizers/CanvasWidgetsNormalizer";
-import { IContainerWidgetProps } from "../../widgets/ContainerWidget";
-import { fetchPage } from "../../actions/pageActions";
-import { RenderModes } from "../../constants/WidgetConstants";
-
-class Canvas extends Component<{ pageWidget: IContainerWidgetProps, fetchPage: Function }> {
+import CanvasWidgetsNormalizer, {
+ widgetSchema
+} from "../../normalizers/CanvasWidgetsNormalizer"
+import { IContainerWidgetProps } from "../../widgets/ContainerWidget"
+import { fetchPage } from "../../actions/pageActions"
+import { RenderModes } from "../../constants/WidgetConstants"
+import DraggableWidget from "../../widgets/DraggableWidget";
+class Canvas extends Component<{
+ pageWidget: IContainerWidgetProps
+ fetchPage: Function
+}> {
componentDidMount() {
this.props.fetchPage("123")
}
@@ -17,16 +22,17 @@ class Canvas extends Component<{ pageWidget: IContainerWidgetProps, fetchPa
const pageWidget = this.props.pageWidget
return (
- {pageWidget
- ? WidgetFactory.createWidget(pageWidget)
- : undefined}
+ {pageWidget ? WidgetFactory.createWidget(pageWidget) : undefined}
)
}
}
const mapStateToProps = (state: AppState, props: any) => {
- const pageWidget = CanvasWidgetsNormalizer.denormalize(state.ui.canvas.pageWidgetId, state.entities)
+ const pageWidget = CanvasWidgetsNormalizer.denormalize(
+ state.ui.canvas.pageWidgetId,
+ state.entities
+ )
return {
pageWidget: pageWidget
}
diff --git a/app/client/src/widgets/BaseWidget.tsx b/app/client/src/widgets/BaseWidget.tsx
index d6d9a75523..bdc4bfa45b 100644
--- a/app/client/src/widgets/BaseWidget.tsx
+++ b/app/client/src/widgets/BaseWidget.tsx
@@ -11,7 +11,11 @@ import {
} from "../constants/WidgetConstants"
import { Component } from "react"
import { BaseStyle } from "../editorComponents/BaseComponent"
+import DraggableWidget from "./DraggableWidget"
import _ from "lodash"
+import * as React from "react"
+import ContainerWidget from "./ContainerWidget";
+import ContainerComponent from "../editorComponents/ContainerComponent";
abstract class BaseWidget<
T extends IWidgetProps,
@@ -19,8 +23,7 @@ abstract class BaseWidget<
> extends Component> {
constructor(props: T) {
super(props)
- const initialState: Partial = {
- }
+ const initialState: Partial = {}
initialState.height = 0
initialState.width = 0
this.state = initialState
@@ -93,7 +96,18 @@ abstract class BaseWidget<
}
getComponentPaneView(): JSX.Element {
- return this.getPageView()
+ return (
+
+ {this.getPageView()}
+
+ )
}
abstract getWidgetType(): WidgetType
diff --git a/app/client/src/widgets/DraggableWidget.tsx b/app/client/src/widgets/DraggableWidget.tsx
new file mode 100644
index 0000000000..2f40dded81
--- /dev/null
+++ b/app/client/src/widgets/DraggableWidget.tsx
@@ -0,0 +1,72 @@
+import * as React from "react"
+import BaseWidget, { IWidgetProps, IWidgetState } from "./BaseWidget"
+import _ from "lodash"
+import { DragSource, DragSourceConnector, DragSourceMonitor } from "react-dnd"
+import ContainerWidget, { IContainerWidgetProps } from "./ContainerWidget"
+import { IContainerProps } from "../editorComponents/ContainerComponent"
+import styled from "../constants/DefaultTheme"
+
+export interface DraggableWidgetProps extends IContainerProps {
+ connectDragSource: Function
+ isDragging?: boolean
+}
+
+export const Container = styled("div")`
+ display: "flex"
+ flexDirection: ${props => {
+ return props.orientation === "HORIZONTAL" ? "row" : "column"
+ }};
+ background: ${props => props.style.backgroundColor};
+ color: ${props => props.theme.primaryColor};
+ position: ${props => {
+ return props.style.positionType === "ABSOLUTE" ? "absolute" : "relative"
+ }};
+ left: ${props => {
+ return props.style.xPosition + props.style.xPositionUnit
+ }};
+ top: ${props => {
+ return props.style.yPosition + props.style.yPositionUnit
+ }};
+`
+
+class DraggableWidget extends React.Component<
+ DraggableWidgetProps,
+ IWidgetState
+> {
+ render() {
+ return this.props.connectDragSource(
+
+ {this.props.children}
+
+ )
+ }
+}
+
+const widgetSource = {
+ beginDrag(props: IWidgetProps) {
+ return {
+ widgetId: props.widgetId
+ }
+ }
+}
+
+const widgetType = (props: IWidgetProps) => {
+ return props.widgetType
+}
+
+function collect(connect: DragSourceConnector, monitor: DragSourceMonitor) {
+ return {
+ connectDragSource: connect.dragSource(),
+ isDragging: monitor.isDragging()
+ }
+}
+
+export default DragSource(widgetType, widgetSource, collect)(DraggableWidget)
diff --git a/app/client/yarn.lock b/app/client/yarn.lock
index fc8e3a6339..67b9b79ca5 100755
--- a/app/client/yarn.lock
+++ b/app/client/yarn.lock
@@ -2131,10 +2131,6 @@ chalk@^2.3.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-change-emitter@^0.1.2:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
-
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -2957,9 +2953,9 @@ dir-glob@^2.0.0:
arrify "^1.0.1"
path-type "^3.0.0"
-dnd-core@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-7.2.0.tgz#70d4ab6c0c6f90423c27b1711624b5d834025bf3"
+dnd-core@^7.4.0:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-7.4.0.tgz#ff12742de12422b396bc79d10b2644a34dabc846"
dependencies:
asap "^2.0.6"
invariant "^2.2.4"
@@ -3632,7 +3628,7 @@ fb-watchman@^2.0.0:
dependencies:
bser "^2.0.0"
-fbjs@^0.8.0, fbjs@^0.8.1:
+fbjs@^0.8.0:
version "0.8.17"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
dependencies:
@@ -4279,7 +4275,7 @@ hoek@4.x.x:
version "4.2.1"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
-hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0:
+hoist-non-react-statics@^2.5.0:
version "2.5.5"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
@@ -7699,22 +7695,21 @@ react-dev-utils@^7.0.1:
strip-ansi "4.0.0"
text-table "0.2.0"
-react-dnd-html5-backend@^7.0.2:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-7.2.0.tgz#4cde55fb690020d98d7b6f3d4400c56b2ae82dfa"
+react-dnd-html5-backend@^7.4.3:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-7.4.0.tgz#d9c328a0c2a3ec0b73ae805c038f09827a7490ce"
dependencies:
- dnd-core "^7.2.0"
+ dnd-core "^7.4.0"
lodash "^4.17.11"
-react-dnd@^7.0.2:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-7.3.1.tgz#40591760d11d996ac859ac6312ea6f26dbfffd23"
+react-dnd@^7.4.3:
+ version "7.4.3"
+ resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-7.4.3.tgz#797d29ea2791e828eec96ac1603fcdee010ee2b7"
dependencies:
- dnd-core "^7.2.0"
+ dnd-core "^7.4.0"
hoist-non-react-statics "^3.3.0"
invariant "^2.1.0"
lodash "^4.17.11"
- recompose "^0.30.0"
shallowequal "^1.1.0"
react-dom@^16.7.0:
@@ -7734,7 +7729,7 @@ react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.2:
version "16.8.4"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2"
-react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4:
+react-lifecycles-compat@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
@@ -7936,17 +7931,6 @@ realpath-native@^1.0.0:
dependencies:
util.promisify "^1.0.0"
-recompose@^0.30.0:
- version "0.30.0"
- resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
- dependencies:
- "@babel/runtime" "^7.0.0"
- change-emitter "^0.1.2"
- fbjs "^0.8.1"
- hoist-non-react-statics "^2.3.1"
- react-lifecycles-compat "^3.0.2"
- symbol-observable "^1.0.4"
-
recursive-readdir@2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
@@ -8971,7 +8955,7 @@ svgo@^1.0.0, svgo@^1.0.5:
unquote "~1.1.1"
util.promisify "~1.0.0"
-symbol-observable@^1.0.2, symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0:
+symbol-observable@^1.0.2, symbol-observable@^1.1.0, symbol-observable@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"