diff --git a/app/client/package-lock.json b/app/client/package-lock.json index 98760d0bb7..ca45726114 100644 --- a/app/client/package-lock.json +++ b/app/client/package-lock.json @@ -1117,6 +1117,15 @@ "@types/react": "*" } }, + "@types/react-redux": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.0.1.tgz", + "integrity": "sha512-+DIH7TI2MT4Ke4lOrRMgNy//DzTDIzv5QwkJSD6AVrlsIgzf7yMM0JoWL5wJUXYwKQ2f1FgvwlvIVGD2QWQnew==", + "requires": { + "@types/react": "*", + "redux": "^4.0.0" + } + }, "@types/react-router": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-4.4.3.tgz", @@ -14998,6 +15007,27 @@ "symbol-observable": "^1.2.0" } }, + "redux-devtools": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/redux-devtools/-/redux-devtools-3.5.0.tgz", + "integrity": "sha512-pGU8TZNvWxPaCCE432AGm6H6alQbAz80gQM5CzM3SjX9/oSNu/HPF17xFdPQJOXasqyih1Gv167kZDTRe7r0iQ==", + "dev": true, + "requires": { + "lodash": "^4.2.0", + "prop-types": "^15.5.7", + "redux-devtools-instrument": "^1.9.0" + } + }, + "redux-devtools-instrument": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/redux-devtools-instrument/-/redux-devtools-instrument-1.9.6.tgz", + "integrity": "sha512-MwvY4cLEB2tIfWWBzrUR02UM9qRG2i7daNzywRvabOSVdvAY7s9BxSwMmVRH1Y/7QWjplNtOwgT0apKhHg2Qew==", + "dev": true, + "requires": { + "lodash": "^4.2.0", + "symbol-observable": "^1.0.2" + } + }, "redux-saga": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.0.0.tgz", diff --git a/app/client/package.json b/app/client/package.json index 32b0d38b7e..cdb430df5c 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -12,12 +12,14 @@ "@types/node": "^10.12.18", "@types/react": "^16.8.2", "@types/react-dom": "^16.8.0", + "@types/react-redux": "^7.0.1", "@types/react-router-dom": "^4.3.1", "@types/styled-components": "^4.1.8", "axios": "^0.18.0", "flow-bin": "^0.91.0", "husky": "^1.3.1", "lint-staged": "^8.1.0", + "lodash": "^4.17.11", "prettier": "^1.16.0", "react": "^16.7.0", "react-dnd": "^7.0.2", @@ -27,6 +29,7 @@ "react-router": "^4.3.1", "react-router-dom": "^4.3.1", "react-scripts": "2.1.3", + "redux": "^4.0.1", "redux-saga": "^1.0.0", "styled-components": "^4.1.3", "typescript": "^3.2.4" @@ -46,5 +49,8 @@ "not dead", "not ie <= 11", "not op_mini all" - ] + ], + "devDependencies": { + "redux-devtools": "^3.5.0" + } } diff --git a/app/client/src/App.tsx b/app/client/src/App.tsx index ad404d2811..05d4e7f0ad 100755 --- a/app/client/src/App.tsx +++ b/app/client/src/App.tsx @@ -1,6 +1,10 @@ import React, { Component } from 'react'; import logo from './assets/images/logo.svg'; import './App.css'; +import { createStore } from 'redux' +import appReducer from './reducers'; + +const store = createStore(appReducer) class App extends Component { render() { diff --git a/app/client/src/constants/ActionConstants.tsx b/app/client/src/constants/ActionConstants.tsx new file mode 100644 index 0000000000..98c082d005 --- /dev/null +++ b/app/client/src/constants/ActionConstants.tsx @@ -0,0 +1,18 @@ +import ContainerWidget from "../widgets/ContainerWidget" + +export type ActionType = "LOAD_CANVAS" | "CLEAR_CANVAS" | "DROP_WIDGET_CANVAS" | "REMOVE_WIDGET_CANVAS" +export const ActionTypes = { + LOAD_CANVAS: "LOAD_CANVAS", + CLEAR_CANVAS: "CLEAR_CANVAS", + DROP_WIDGET_CANVAS: "DROP_WIDGET_CANVAS", + REMOVE_WIDGET_CANVAS: "REMOVE_WIDGET_CANVAS" +} + +export interface ReduxAction { + actionType: ActionType + payload: T +} + +export interface LoadCanvasPayload { + containerWidget: ContainerWidget +} \ No newline at end of file diff --git a/app/client/src/constants/AppConstants.tsx b/app/client/src/constants/AppConstants.tsx deleted file mode 100644 index 28e681f540..0000000000 --- a/app/client/src/constants/AppConstants.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export const a = () => { - -} \ No newline at end of file diff --git a/app/client/src/constants/WidgetConstants.tsx b/app/client/src/constants/WidgetConstants.tsx new file mode 100644 index 0000000000..548c6ce841 --- /dev/null +++ b/app/client/src/constants/WidgetConstants.tsx @@ -0,0 +1,2 @@ +export type WidgetType = "TEXT_WIDGET" | "IMAGE_WIDGET" | "CONTAINER_WIDGET" | "LIST_WIDGET" | "INPUT_TEXT_WIDGET" +export type ContainerOrientation = "HORIZONTAL" | "VERTICAL" | "ABSOLUTE" \ No newline at end of file diff --git a/app/client/src/editorComponents/BaseComponent.tsx b/app/client/src/editorComponents/BaseComponent.tsx new file mode 100644 index 0000000000..5115bd114b --- /dev/null +++ b/app/client/src/editorComponents/BaseComponent.tsx @@ -0,0 +1,26 @@ +import * as React from "react" +/*** + * Components are responsible for binding render inputs to corresponding UI SDKs + */ +abstract class BaseComponent extends React.Component { + + componentData: T + + constructor(componentProps: T) { + super(componentProps) + this.componentData = componentProps + } + +} + +export interface BaseStyle { + height?: number + width?: number +} + +export interface IComponentProps { + widgetId: string + style?: BaseStyle +} + +export default BaseComponent \ No newline at end of file diff --git a/app/client/src/editorComponents/ButtonComponent.tsx b/app/client/src/editorComponents/ButtonComponent.tsx new file mode 100644 index 0000000000..0d5abee2c1 --- /dev/null +++ b/app/client/src/editorComponents/ButtonComponent.tsx @@ -0,0 +1,15 @@ +import * as React from "react" +import { Button, MaybeElement } from "@blueprintjs/core" +import { ITextComponentProps } from "./TextComponent"; + +class ButtomComponent extends React.Component { + render() { + return