2019-09-09 10:30:22 +00:00
|
|
|
import React, { Component } from "react";
|
|
|
|
|
import { connect } from "react-redux";
|
|
|
|
|
import styled from "styled-components";
|
|
|
|
|
import Canvas from "./Canvas";
|
|
|
|
|
import { WidgetCardProps, WidgetProps } from "../../widgets/BaseWidget";
|
|
|
|
|
import { AppState } from "../../reducers";
|
|
|
|
|
import { EditorReduxState } from "../../reducers/uiReducers/editorReducer";
|
|
|
|
|
import WidgetCardsPane from "./WidgetCardsPane";
|
|
|
|
|
import EditorHeader from "./EditorHeader";
|
|
|
|
|
import { WidgetType } from "../../constants/WidgetConstants";
|
|
|
|
|
import CanvasWidgetsNormalizer from "../../normalizers/CanvasWidgetsNormalizer";
|
|
|
|
|
import { ContainerWidgetProps } from "../../widgets/ContainerWidget";
|
|
|
|
|
import { fetchPage, addWidget } from "../../actions/pageActions";
|
|
|
|
|
import { RenderModes } from "../../constants/WidgetConstants";
|
2019-08-29 11:22:09 +00:00
|
|
|
// import EditorDragLayer from "./EditorDragLayer"
|
2019-08-20 13:19:19 +00:00
|
|
|
|
2019-08-29 11:22:09 +00:00
|
|
|
const CanvasContainer = styled.section`
|
2019-08-20 13:19:19 +00:00
|
|
|
height: 100%;
|
|
|
|
|
width: 100%;
|
|
|
|
|
position: relative;
|
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
margin: 0px 10px;
|
2019-08-26 12:41:21 +00:00
|
|
|
&:before {
|
|
|
|
|
position: absolute;
|
2019-09-09 09:08:54 +00:00
|
|
|
top: 0;
|
|
|
|
|
right: 0;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
left: 0;
|
2019-08-26 12:41:21 +00:00
|
|
|
z-index: 1000;
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
}
|
2019-08-20 13:19:19 +00:00
|
|
|
`;
|
2019-02-07 05:07:09 +00:00
|
|
|
|
2019-08-26 12:41:21 +00:00
|
|
|
const EditorWrapper = styled.div`
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
align-items: stretch;
|
|
|
|
|
justify-content: flex-start;
|
|
|
|
|
width: 100vw;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
height: calc(100vh - 60px);
|
2019-08-29 11:22:09 +00:00
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
type EditorProps = {
|
|
|
|
|
pageWidget: ContainerWidgetProps<any> | any;
|
|
|
|
|
fetchCanvasWidgets: Function;
|
2019-09-06 09:30:22 +00:00
|
|
|
cards: { [id: string]: WidgetCardProps[] } | any;
|
2019-08-29 11:22:09 +00:00
|
|
|
addPageWidget: Function;
|
2019-09-02 10:58:11 +00:00
|
|
|
page: string;
|
2019-09-09 10:30:22 +00:00
|
|
|
};
|
2019-08-26 12:41:21 +00:00
|
|
|
|
2019-08-29 11:22:09 +00:00
|
|
|
class Editor extends Component<EditorProps> {
|
2019-08-26 12:41:21 +00:00
|
|
|
componentDidMount() {
|
2019-09-09 10:30:22 +00:00
|
|
|
this.props.fetchCanvasWidgets("1");
|
2019-08-26 12:41:21 +00:00
|
|
|
}
|
|
|
|
|
|
2019-08-29 11:22:09 +00:00
|
|
|
addWidgetToCanvas = (widgetType: WidgetType, key: string): void => {
|
2019-08-26 12:41:21 +00:00
|
|
|
this.props.addPageWidget("1", {
|
2019-08-29 11:22:09 +00:00
|
|
|
key: key,
|
2019-08-26 12:41:21 +00:00
|
|
|
bottomRow: 9,
|
|
|
|
|
leftColumn: 1,
|
|
|
|
|
parentColumnSpace: 90,
|
|
|
|
|
parentRowSpace: 50,
|
|
|
|
|
renderMode: RenderModes.CANVAS,
|
|
|
|
|
rightColumn: 3,
|
|
|
|
|
snapColumns: 20,
|
|
|
|
|
snapRows: 20,
|
|
|
|
|
children: [],
|
|
|
|
|
topRow: 1,
|
2019-08-29 11:22:09 +00:00
|
|
|
widgetId: key,
|
2019-09-09 10:30:22 +00:00
|
|
|
widgetType: widgetType,
|
|
|
|
|
});
|
|
|
|
|
};
|
2019-08-26 12:41:21 +00:00
|
|
|
|
2019-08-29 11:22:09 +00:00
|
|
|
public render() {
|
2019-02-07 05:07:09 +00:00
|
|
|
return (
|
2019-08-26 12:41:21 +00:00
|
|
|
<React.Fragment>
|
2019-08-20 13:19:19 +00:00
|
|
|
<EditorHeader></EditorHeader>
|
2019-08-26 12:41:21 +00:00
|
|
|
<EditorWrapper>
|
|
|
|
|
<WidgetCardsPane cards={this.props.cards} />
|
2019-08-29 11:22:09 +00:00
|
|
|
<CanvasContainer>
|
2019-09-09 10:30:22 +00:00
|
|
|
<Canvas
|
|
|
|
|
pageWidget={this.props.pageWidget}
|
|
|
|
|
addWidget={this.addWidgetToCanvas}
|
|
|
|
|
/>
|
2019-08-29 11:22:09 +00:00
|
|
|
</CanvasContainer>
|
2019-08-26 12:41:21 +00:00
|
|
|
</EditorWrapper>
|
|
|
|
|
</React.Fragment>
|
2019-09-09 10:30:22 +00:00
|
|
|
);
|
2019-02-07 05:07:09 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-09 10:30:22 +00:00
|
|
|
const mapStateToProps = (state: AppState): EditorReduxState => {
|
2019-08-26 12:41:21 +00:00
|
|
|
const pageWidget = CanvasWidgetsNormalizer.denormalize(
|
|
|
|
|
state.ui.canvas.pageWidgetId,
|
2019-09-09 10:30:22 +00:00
|
|
|
state.entities,
|
|
|
|
|
);
|
2019-08-26 12:41:21 +00:00
|
|
|
return {
|
|
|
|
|
cards: state.ui.widgetCardsPane.cards,
|
|
|
|
|
pageWidget,
|
2019-09-09 10:30:22 +00:00
|
|
|
};
|
|
|
|
|
};
|
2019-08-26 12:41:21 +00:00
|
|
|
|
|
|
|
|
const mapDispatchToProps = (dispatch: any) => {
|
|
|
|
|
return {
|
2019-09-09 10:30:22 +00:00
|
|
|
fetchCanvasWidgets: (pageId: string) =>
|
|
|
|
|
dispatch(fetchPage(pageId, RenderModes.CANVAS)),
|
|
|
|
|
addPageWidget: (pageId: string, widgetProps: WidgetProps) =>
|
|
|
|
|
dispatch(addWidget(pageId, widgetProps)),
|
|
|
|
|
};
|
|
|
|
|
};
|
2019-08-26 12:41:21 +00:00
|
|
|
|
|
|
|
|
export default connect(
|
|
|
|
|
mapStateToProps,
|
2019-09-09 10:30:22 +00:00
|
|
|
mapDispatchToProps,
|
|
|
|
|
)(Editor);
|