diff --git a/__tests__/integration/mirador/index.html b/__tests__/integration/mirador/index.html index c97fa455ce0169117392aa3492c621a009037151..172ea303e71601b8478f3d95bdcf68b875ac0b00 100644 --- a/__tests__/integration/mirador/index.html +++ b/__tests__/integration/mirador/index.html @@ -13,14 +13,9 @@ <script type="text/javascript"> var miradorInstance = Mirador.viewer({ id: 'mirador', - windows: [{ - loadedManifest: 'https://iiif.harvardartmuseums.org/manifests/object/299843', - canvasIndex: 2, - thumbnailNavigationPosition: 'far-bottom', + workspace: { + isWorkspaceAddVisible: true, }, - { - loadedManifest: 'https://iiif.bodleian.ox.ac.uk/iiif/manifest/e32a277e-91e2-4a6d-8ba6-cc4bad230410.json', - }], window: { hideSearchPanel: false, }, diff --git a/__tests__/src/actions/config.test.js b/__tests__/src/actions/config.test.js index 31857f319c48000d3a66cbdc5f3086ad5893a2b4..94c2d2986e3ed581eaa83136df4d2029f0389f9e 100644 --- a/__tests__/src/actions/config.test.js +++ b/__tests__/src/actions/config.test.js @@ -43,4 +43,17 @@ describe('config actions', () => { expect(actions.importMiradorState(state).type).toEqual(ActionTypes.IMPORT_MIRADOR_STATE); }); }); + describe('setWorkspaceAddVisibility', () => { + it('should set the the isWorkspaceAddVisible property', () => { + expect(actions.setWorkspaceAddVisibility(true)).toEqual({ + config: { workspace: { isWorkspaceAddVisible: true } }, + type: ActionTypes.UPDATE_CONFIG, + }); + + expect(actions.setWorkspaceAddVisibility(true)).toEqual({ + config: { workspace: { isWorkspaceAddVisible: true } }, + type: ActionTypes.UPDATE_CONFIG, + }); + }); + }); }); diff --git a/__tests__/src/actions/workspace.test.js b/__tests__/src/actions/workspace.test.js index 4eec7ef21699c1ba4770369fe9e3c91a72411ef2..d4acc6096afc88bbe3707b02f2c3833a9e541edc 100644 --- a/__tests__/src/actions/workspace.test.js +++ b/__tests__/src/actions/workspace.test.js @@ -40,15 +40,6 @@ describe('workspace actions', () => { expect(actions.toggleZoomControls(true)).toEqual(expectedAction); }); }); - describe('setWorkspaceAddVisibility', () => { - it('should set the workspace add visibility', () => { - const expectedAction = { - isWorkspaceAddVisible: true, - type: ActionTypes.SET_WORKSPACE_ADD_VISIBILITY, - }; - expect(actions.setWorkspaceAddVisibility(true)).toEqual(expectedAction); - }); - }); describe('setWorkspaceViewportDimensions', () => { it('should set the workspace add visibility', () => { const expectedAction = { diff --git a/__tests__/src/reducers/workspace.test.js b/__tests__/src/reducers/workspace.test.js index e03538874ba093d5b1a42c55f3086ebfc3028edc..7a825a9b91aeecef6c59e56fb5f3b4afff9b8c8d 100644 --- a/__tests__/src/reducers/workspace.test.js +++ b/__tests__/src/reducers/workspace.test.js @@ -71,14 +71,6 @@ describe('workspace reducer', () => { layout: { foo: 'bar' }, }); }); - it('should handle SET_WORKSPACE_ADD_VISIBILITY', () => { - expect(workspaceReducer([], { - isWorkspaceAddVisible: true, - type: ActionTypes.SET_WORKSPACE_ADD_VISIBILITY, - })).toEqual({ - isWorkspaceAddVisible: true, - }); - }); it('should handle SET_WORKSPACE_VIEWPORT_POSITION', () => { expect(workspaceReducer({ height: 5000, width: 5000 }, { payload: { diff --git a/src/config/settings.js b/src/config/settings.js index a20f3360a002f9604b6420bd86729a1f52082025..d6ad00501151f74899bda6e391bc332656138a15 100644 --- a/src/config/settings.js +++ b/src/config/settings.js @@ -230,6 +230,7 @@ export default { workspace: { showZoomControls: false, // Configure if zoom controls should be displayed by default type: 'mosaic', // Which workspace type to load by default. Other possible values are "elastic" + isWorkspaceAddVisible: false, }, workspaceControlPanel: { enabled: true, // Configure if the control panel should be rendered. Useful if you want to lock the viewer down to only the configured manifests diff --git a/src/containers/WindowListButton.js b/src/containers/WindowListButton.js index f35f162ca27446079efe1a5260d23ff9284552a0..8e5cb93505f914307dff03db0d6e3eece3f675a4 100644 --- a/src/containers/WindowListButton.js +++ b/src/containers/WindowListButton.js @@ -6,8 +6,8 @@ import { withPlugins } from '../extend/withPlugins'; import { WindowListButton } from '../components/WindowListButton'; /** */ -const mapStateToProps = ({ windows, workspace }) => ({ - disabled: workspace.isWorkspaceAddVisible, +const mapStateToProps = ({ windows, config }) => ({ + disabled: config.workspace.isWorkspaceAddVisible, windowCount: Object.keys(windows).length, }); diff --git a/src/containers/WorkspaceAddButton.js b/src/containers/WorkspaceAddButton.js index 4635e30a04227fcf912f3fd3d97479853c1d1464..d8aa7bb943c87a6d4e7225b004e6e1ed638a1ddd 100644 --- a/src/containers/WorkspaceAddButton.js +++ b/src/containers/WorkspaceAddButton.js @@ -13,7 +13,7 @@ import { WorkspaceAddButton } from '../components/WorkspaceAddButton'; * @private */ const mapStateToProps = (state, { width }) => { - const { isWorkspaceAddVisible } = state.workspace; + const { isWorkspaceAddVisible } = state.config.workspace; return { isWorkspaceAddVisible, useExtendedFab: ( diff --git a/src/containers/WorkspaceArea.js b/src/containers/WorkspaceArea.js index 39ac37d02b10ac5bbbeb1c8dd64c17b8cd98ba96..2f3d2f9ee6962294012bd62577cc89928f8d59c8 100644 --- a/src/containers/WorkspaceArea.js +++ b/src/containers/WorkspaceArea.js @@ -12,8 +12,8 @@ import { WorkspaceArea } from '../components/WorkspaceArea'; */ const mapStateToProps = state => ( { - controlPanelVariant: state.workspace.isWorkspaceAddVisible || Object.keys(state.windows).length > 0 ? undefined : 'wide', - isWorkspaceAddVisible: state.workspace.isWorkspaceAddVisible, + controlPanelVariant: state.config.workspace.isWorkspaceAddVisible || Object.keys(state.windows).length > 0 ? undefined : 'wide', + isWorkspaceAddVisible: state.config.workspace.isWorkspaceAddVisible, isWorkspaceControlPanelVisible: state.config.workspaceControlPanel.enabled, } ); diff --git a/src/containers/WorkspaceMenu.js b/src/containers/WorkspaceMenu.js index dcf19e1e512f7063ba27b0e81ecbe1fc53206f54..7352004313b1cb38a5191958106c8a6fe2f1b6cd 100644 --- a/src/containers/WorkspaceMenu.js +++ b/src/containers/WorkspaceMenu.js @@ -22,7 +22,7 @@ const mapDispatchToProps = { */ const mapStateToProps = state => ({ containerId: getContainerId(state), - isWorkspaceAddVisible: state.workspace.isWorkspaceAddVisible, + isWorkspaceAddVisible: state.config.workspace.isWorkspaceAddVisible, showThemePicker: getThemeIds(state).length > 0, showZoomControls: getShowZoomControlsConfig(state), }); diff --git a/src/state/actions/config.js b/src/state/actions/config.js index ce047806a994e30c4283c54095372b77c165ce04..99681a058838dc1e000b035fab1ddb55c72cbd25 100644 --- a/src/state/actions/config.js +++ b/src/state/actions/config.js @@ -47,3 +47,15 @@ export function importMiradorState(state) { }; return { state: newState, type: ActionTypes.IMPORT_MIRADOR_STATE }; } + +/** + * @param {Object} isWorkspaceAddVisible + * @memberof ActionCreators + */ +export function setWorkspaceAddVisibility(isWorkspaceAddVisible) { + return updateConfig({ + workspace: { + isWorkspaceAddVisible, + }, + }); +} diff --git a/src/state/actions/workspace.js b/src/state/actions/workspace.js index ff0f64b6d57c17cf4f1a11c728c6025f28663e4e..01589e2c6d1e29b054c9f7e37f21f3689e37863d 100644 --- a/src/state/actions/workspace.js +++ b/src/state/actions/workspace.js @@ -29,16 +29,6 @@ export function updateWorkspaceMosaicLayout(layout) { return { layout, type: ActionTypes.UPDATE_WORKSPACE_MOSAIC_LAYOUT }; } -/** - * updateWorkspaceMosaicLayout - action creator - * - * @param {Object} isWorkspaceAddVisible - * @memberof ActionCreators - */ -export function setWorkspaceAddVisibility(isWorkspaceAddVisible) { - return { isWorkspaceAddVisible, type: ActionTypes.SET_WORKSPACE_ADD_VISIBILITY }; -} - /** * setWorkspaceViewportPosition - action creator * diff --git a/src/state/reducers/workspace.js b/src/state/reducers/workspace.js index c8a1e4fcb84139a5faaf839cb84462f0af4e8ce3..039789080fe1220f2bca91fcfb191cc194c54396 100644 --- a/src/state/reducers/workspace.js +++ b/src/state/reducers/workspace.js @@ -63,8 +63,6 @@ export const workspaceReducer = ( return { ...state, showZoomControls: action.showZoomControls }; case ActionTypes.UPDATE_WORKSPACE_MOSAIC_LAYOUT: return { ...state, layout: action.layout }; - case ActionTypes.SET_WORKSPACE_ADD_VISIBILITY: - return { ...state, isWorkspaceAddVisible: action.isWorkspaceAddVisible }; case ActionTypes.SET_WORKSPACE_VIEWPORT_POSITION: newWorkspaceDimensions = {};