import BaseWidget, { IWidgetProps, IWidgetState } from "./BaseWidget"; import ContainerComponent, { IContainerProps } from "../editorComponents/ContainerComponent"; import { ContainerOrientation, WidgetType, CSSUnits } from "../constants/WidgetConstants"; import WidgetFactory from "../utils/WidgetFactory"; import React from "react"; import _ from "lodash"; const DEFAULT_NUM_COLS = 13; const DEFAULT_NUM_ROWS = 13; class ContainerWidget extends BaseWidget< IContainerWidgetProps, IWidgetState > { snapColumnSpace: number = 100; snapRowSpace: number = 100; constructor(props: IContainerWidgetProps) { super(props); this.renderChildWidget = this.renderChildWidget.bind(this); this.state = { height: 0, width: 0 }; } componentWillReceiveProps( previousProps: IContainerWidgetProps, nextProps: IContainerWidgetProps ) { super.componentWillReceiveProps(previousProps, nextProps); this.snapColumnSpace = this.state.width / (nextProps.snapColumns || DEFAULT_NUM_COLS); this.snapRowSpace = this.state.height / (nextProps.snapRows || DEFAULT_NUM_ROWS); } renderChildWidget(childWidgetData: IWidgetProps) { childWidgetData.parentColumnSpace = this.snapColumnSpace; childWidgetData.parentRowSpace = this.snapRowSpace; return WidgetFactory.createWidget(childWidgetData); } getWidgetView() { return ( {_.map(this.props.children, this.renderChildWidget)} ); } getWidgetType(): WidgetType { return "CONTAINER_WIDGET"; } } export interface IContainerWidgetProps extends IWidgetProps { children?: T[]; snapColumns?: number; snapRows?: number; orientation?: ContainerOrientation; } export default ContainerWidget;