From 26e3404d217a9adcaccbd0e739a57ff37a4118cf Mon Sep 17 00:00:00 2001 From: "Andrew Winget (Standard)" <scipioaffricanus@gmail.com> Date: Wed, 20 Feb 2019 10:27:41 -0800 Subject: [PATCH] add bounding box function --- src/components/WorkspaceElastic.js | 3 +++ src/config/settings.js | 2 +- src/containers/WorkspaceElastic.js | 2 ++ src/state/reducers/workspace.js | 4 ++-- src/state/selectors/index.js | 20 ++++++++++++++++++++ src/styles/index.scss | 1 + 6 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/components/WorkspaceElastic.js b/src/components/WorkspaceElastic.js index 65de11c19..896c3c4fc 100644 --- a/src/components/WorkspaceElastic.js +++ b/src/components/WorkspaceElastic.js @@ -15,11 +15,13 @@ class WorkspaceElastic extends React.Component { render() { const { workspace, + boundingBox, windows, setWorkspaceViewportPosition, updateWindowPosition, setWindowSize, } = this.props; + console.log(boundingBox); return ( <Rnd default={{ @@ -77,6 +79,7 @@ WorkspaceElastic.propTypes = { setWorkspaceViewportPosition: PropTypes.func.isRequired, windows: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types workspace: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types + boundingBox: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types updateWindowPosition: PropTypes.func.isRequired, setWindowSize: PropTypes.func.isRequired, }; diff --git a/src/config/settings.js b/src/config/settings.js index f3d393155..deae277ae 100644 --- a/src/config/settings.js +++ b/src/config/settings.js @@ -18,7 +18,7 @@ export default { height: 150, }, workspace: { - type: 'freeform', + type: 'elastic', }, workspaceControlPanel: { enabled: true, diff --git a/src/containers/WorkspaceElastic.js b/src/containers/WorkspaceElastic.js index 8c0b8d714..877673db8 100644 --- a/src/containers/WorkspaceElastic.js +++ b/src/containers/WorkspaceElastic.js @@ -1,6 +1,7 @@ import { compose } from 'redux'; import { connect } from 'react-redux'; import * as actions from '../state/actions'; +import { getWorkspaceBoundingBox } from '../state/selectors'; import WorkspaceElastic from '../components/WorkspaceElastic'; /** @@ -10,6 +11,7 @@ import WorkspaceElastic from '../components/WorkspaceElastic'; */ const mapStateToProps = state => ( { + boundingBox: getWorkspaceBoundingBox(state.windows), workspace: state.workspace, windows: state.windows, } diff --git a/src/state/reducers/workspace.js b/src/state/reducers/workspace.js index b98216833..6abaeb93a 100644 --- a/src/state/reducers/workspace.js +++ b/src/state/reducers/workspace.js @@ -9,7 +9,7 @@ export const workspaceReducer = ( x: -2500, y: -2500, }, - exposedModeOn: false, + exposeModeOn: false, }, action, ) => { @@ -27,7 +27,7 @@ export const workspaceReducer = ( case ActionTypes.SET_WORKSPACE_VIEWPORT_POSITION: return { ...state, viewportPosition: action.payload.position }; case ActionTypes.TOGGLE_WORKSPACE_EXPOSE_MODE: - return { ...state, exposeModeOn: !state.exposedModeOn }; + return { ...state, exposeModeOn: !state.exposeModeOn }; default: return state; } diff --git a/src/state/selectors/index.js b/src/state/selectors/index.js index 69a9c3646..04c33d17c 100644 --- a/src/state/selectors/index.js +++ b/src/state/selectors/index.js @@ -189,3 +189,23 @@ export function getCompanionWindowForPosition(state, windowId, position) { && state.windows[windowId].companionWindows && state.windows[windowId].companionWindows[position]; } + +/** + * Return the bounding box for all open windows in the elastic workspace + * in workspace coordinates + * @param {object} state + * @return {object} + */ +export function getWorkspaceBoundingBox(windows) { + const windowObjects = Object.values(windows); + const minX = Math.min(...windowObjects.map(win => win.x)); + const minY = Math.min(...windowObjects.map(win => win.y)); + const maxX = Math.max(...windowObjects.map(win => win.x + win.width)); + const maxY = Math.max(...windowObjects.map(win => win.y + win.height)); + return { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY, + }; +} diff --git a/src/styles/index.scss b/src/styles/index.scss index d681f4e04..6103d91c8 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -7,6 +7,7 @@ right: 0; bottom: 0; left: 0; + overflow: hidden; } &-workspace-viewport { -- GitLab