From 790299f2d2c63ad8c258b08b024ff2c22f492ce6 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 30 Oct 2018 18:12:21 +0100 Subject: [PATCH] introduce MainSplit, to split between room/group body and right panel --- src/components/structures/MainSplit.js | 76 ++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/components/structures/MainSplit.js diff --git a/src/components/structures/MainSplit.js b/src/components/structures/MainSplit.js new file mode 100644 index 0000000000..d21a518c7c --- /dev/null +++ b/src/components/structures/MainSplit.js @@ -0,0 +1,76 @@ +/* +Copyright 2018 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; +import ResizeHandle from '../views/elements/ResizeHandle'; +import {Resizer, FixedDistributor} from '../../resizer'; + +export default class MainSplit extends React.Component { + + constructor(props) { + super(props); + this._setResizeContainerRef = this._setResizeContainerRef.bind(this); + } + + _createResizer() { + const classNames = { + handle: "mx_ResizeHandle", + vertical: "mx_ResizeHandle_vertical", + reverse: "mx_ResizeHandle_reverse" + }; + const resizer = new Resizer( + this.resizeContainer, + FixedDistributor); + resizer.setClassNames(classNames); + return resizer; + } + + _setResizeContainerRef(div) { + this.resizeContainer = div; + } + + _loadResizerPreferences() { + const rhsSize = window.localStorage.getItem("mx_rhs_size"); + if (rhsSize !== null) { + this.resizer.forHandleAt(0).resize(parseInt(rhsSize, 10)); + } + } + + componentDidMount() { + this.resizer = this._createResizer(); + this.resizer.attach(); + this._loadResizerPreferences(); + } + + componentWillUnmount() { + this.resizer.detach(); + } + + render() { + const bodyView = React.Children.only(this.props.children); + const panelView = this.props.panel; + + if (this.props.collapsedRhs || !panelView) { + return bodyView; + } else { + return
+ { bodyView } + + { panelView } +
; + } + } +};