diff --git a/src/components/Window.js b/src/components/Window.js index d22e44b5bb7b5e41db47568792ea54f823373db9..eddcecf7300889f297a0ae275e80a5d3b4958d59 100644 --- a/src/components/Window.js +++ b/src/components/Window.js @@ -14,12 +14,13 @@ export class Window extends Component { * Renders things */ render() { - const { manifest, window } = this.props; + const { manifest, window, layout } = this.props; if (!window) return <></>; return ( <div id={window.id} className={ns('window')}> <WindowTopBar + layout={layout} windowId={window.id} manifest={manifest} /> @@ -42,9 +43,11 @@ export class Window extends Component { Window.propTypes = { window: PropTypes.object, // eslint-disable-line react/forbid-prop-types manifest: PropTypes.object, // eslint-disable-line react/forbid-prop-types + layout: PropTypes.object, // eslint-disable-line react/forbid-prop-types }; Window.defaultProps = { window: null, manifest: null, + layout: null, }; diff --git a/src/containers/WindowTopBar.js b/src/containers/WindowTopBar.js index a082a6e57ec35e24075777be3ad83f258d7cfd41..e3fbca8be4f86bc1e7aacae0372d82084679bc55 100644 --- a/src/containers/WindowTopBar.js +++ b/src/containers/WindowTopBar.js @@ -8,7 +8,7 @@ import { getWindowManifest, getManifestTitle } from '../state/selectors'; import { WindowTopBar } from '../components/WindowTopBar'; /** mapStateToProps */ -const mapStateToProps = (state, { windowId }) => ({ +const mapStateToProps = (state, { windowId, layout }) => ({ manifestTitle: getManifestTitle(getWindowManifest(state, windowId)), maximized: state.windows[windowId].maximized, }); @@ -18,9 +18,9 @@ const mapStateToProps = (state, { windowId }) => ({ * @memberof ManifestListItem * @private */ -const mapDispatchToProps = (dispatch, { windowId }) => ({ +const mapDispatchToProps = (dispatch, { windowId, layout }) => ({ closeWindow: () => dispatch(actions.closeWindow(windowId)), - maximizeWindow: () => dispatch(actions.maximizeWindow(windowId)), + maximizeWindow: () => dispatch(actions.maximizeWindow(windowId, layout)), minimizeWindow: () => dispatch(actions.minimizeWindow(windowId)), toggleWindowSideBar: () => dispatch(actions.toggleWindowSideBar(windowId)), }); diff --git a/src/containers/Workspace.js b/src/containers/Workspace.js index 9eb414e598bff5b44741612ddfe429e45cdba1e4..7d7a7a618b5458cce51c12157c19099fd23e4557 100644 --- a/src/containers/Workspace.js +++ b/src/containers/Workspace.js @@ -1,6 +1,5 @@ import { compose } from 'redux'; import { connect } from 'react-redux'; -import pickBy from 'lodash/pickBy'; import { Workspace } from '../components/Workspace'; /** @@ -13,10 +12,7 @@ const mapStateToProps = state => ( isWorkspaceControlPanelVisible: state.config.workspaceControlPanel.enabled, workspaceType: state.config.workspace.type, windows: state.windows, - // pickBy(state.windows, window => window.maximized === false), - // Object.keys(state.windows) - // .map(id => state.windows[id]) - // .filter(window => window.displayable === true), + savedLayout: state.workspace.savedLayout, } ); diff --git a/src/state/actions/action-types.js b/src/state/actions/action-types.js index 1fa2d831733b1af6adb004058a3c2bb085291fcb..6648f7d9c117a172178d2f01322514f5cfe0177c 100644 --- a/src/state/actions/action-types.js +++ b/src/state/actions/action-types.js @@ -31,6 +31,7 @@ const ActionTypes = { RECEIVE_INFO_RESPONSE: 'RECEIVE_INFO_RESPONSE', RECEIVE_INFO_RESPONSE_FAILURE: 'RECEIVE_INFO_RESPONSE_FAILURE', REMOVE_INFO_RESPONSE: 'REMOVE_INFO_RESPONSE', + SAVE_WORKSPACE_MOSAIC_LAYOUT: 'SAVE_WORKSPACE_MOSAIC_LAYOUT', UPDATE_WORKSPACE_MOSAIC_LAYOUT: 'UPDATE_WORKSPACE_MOSAIC_LAYOUT', UPDATE_VIEWPORT: 'UPDATE_VIEWPORT', }; diff --git a/src/state/actions/window.js b/src/state/actions/window.js index 9e92245b10b910e26c8192b795fefe32f25d67cd..c7cf1961c37988251939e775def163687ca43e32 100644 --- a/src/state/actions/window.js +++ b/src/state/actions/window.js @@ -40,8 +40,12 @@ export function addWindow(options) { * @param {String} windowId * @memberof ActionCreators */ -export function maximizeWindow(windowId) { - return { type: ActionTypes.MAXIMIZE_WINDOW, windowId }; +export function maximizeWindow(windowId, layout) { + // return { type: ActionTypes.MAXIMIZE_WINDOW, windowId }; + return (dispatch) => { + dispatch({ type: ActionTypes.MAXIMIZE_WINDOW, windowId }); + dispatch({ type: ActionTypes.SAVE_WORKSPACE_MOSAIC_LAYOUT, layout }); + }; } /** diff --git a/src/state/actions/workspace.js b/src/state/actions/workspace.js index b8b03d96e4f23a21d85adc75c38f1fda046cb511..6e669c6d56f15451708ebda28129c2c10fbe3541 100644 --- a/src/state/actions/workspace.js +++ b/src/state/actions/workspace.js @@ -20,6 +20,16 @@ export function toggleZoomControls(showZoomControls) { return { type: ActionTypes.TOGGLE_ZOOM_CONTROLS, showZoomControls }; } +/** + * saveWorkspaceMosaicLayout - action creator + * + * @param {Object} layout + * @memberof ActionCreators + */ +export function saveWorkspaceMosaicLayout(layout) { + return { type: ActionTypes.SAVE_WORKSPACE_MOSAIC_LAYOUT, layout }; +} + /** * updateWorkspaceMosaicLayout - action creator * diff --git a/src/state/reducers/workspace.js b/src/state/reducers/workspace.js index 52a339a47828859267cab9085cf36b26890e7c95..6381e9e543fe9f9adbeb4e9c6f1cf961041045a9 100644 --- a/src/state/reducers/workspace.js +++ b/src/state/reducers/workspace.js @@ -11,6 +11,8 @@ export const workspaceReducer = (state = {}, action) => { return { ...state, isFullscreenEnabled: action.isFullscreenEnabled }; case ActionTypes.TOGGLE_ZOOM_CONTROLS: return { ...state, showZoomControls: action.showZoomControls }; + case ActionTypes.SAVE_WORKSPACE_MOSAIC_LAYOUT: + return { ...state, savedLayout: action.layout }; case ActionTypes.UPDATE_WORKSPACE_MOSAIC_LAYOUT: return { ...state, layout: action.layout }; case ActionTypes.SET_WORKSPACE_ADD_VISIBILITY: