diff --git a/src/components/WorkspaceElastic.js b/src/components/WorkspaceElastic.js index 65de11c19693ac3567cfcba6aaed850c3d346357..896c3c4fcbf4d328d4b48d47d71ca7555daf9154 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 f3d393155de47763e31f0ef4ca36f4077ec1eeae..deae277aebc6aefe648d2cbf3817585e7161c47e 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 8c0b8d714bb1d69c700178fd79aefac3612b1288..877673db860bfaf3a9069c9b0d08ea209a8a4868 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 b98216833751923414476b3b46910b1db2c34b19..6abaeb93abc2395bb2cf99343aa8cdaf5b67a3c2 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 69a9c36462fc40e1fd04dcc09df0b1b822d00801..04c33d17c9f6cdf256feb8839ef37d76d58f9c8f 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 d681f4e047de5f05f2a8b1ad79dfdd3beea1ea61..6103d91c8f84c6a48e5d8efc10a993a51681f203 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 {