diff --git a/__tests__/src/actions/window.test.js b/__tests__/src/actions/window.test.js index e7242be02c0aa389ad2689605295229b02469c2b..92985b557ba6900e9197b4a7f887d1c2e945de9a 100644 --- a/__tests__/src/actions/window.test.js +++ b/__tests__/src/actions/window.test.js @@ -150,7 +150,9 @@ describe('window actions', () => { companionWindows: {}, config: { thumbnailNavigation: {}, - window: {}, + window: { + defaultSideBarPanel: 'info', + }, }, windows: {}, }; @@ -167,6 +169,35 @@ describe('window actions', () => { expect(action.window.companionWindowIds[2]).toEqual(action.companionWindows[2].id); expect(action.companionWindows[2]).toMatchObject({ content: 'attribution', position: 'right' }); }); + it('creates a new window without a default sidebar', () => { + const options = { + canvasIndex: 1, + companionWindows: [], + id: 'helloworld', + }; + + const mockState = { + companionWindows: {}, + config: { + thumbnailNavigation: {}, + window: { + defaultSideBarPanel: null, + }, + }, + windows: {}, + }; + + const mockDispatch = jest.fn(() => ({})); + const mockGetState = jest.fn(() => mockState); + const thunk = actions.addWindow(options); + + thunk(mockDispatch, mockGetState); + + const action = mockDispatch.mock.calls[0][0]; + + expect(action.window.companionWindowIds.length).toEqual(1); + expect(action.companionWindows[0]).toMatchObject({ content: 'thumbnailNavigation' }); + }); }); describe('updateWindow', () => { diff --git a/src/state/actions/window.js b/src/state/actions/window.js index 0556fbc65b410854bc57a9f36daa02311db474c0..ebf2cf10f4a6f1103cba4aa10b16f73baaaa8266 100644 --- a/src/state/actions/window.js +++ b/src/state/actions/window.js @@ -42,14 +42,37 @@ export function addWindow({ companionWindows, ...options }) { const { config, windows } = getState(); const numWindows = Object.keys(windows).length; - const cwDefault = `cw-${uuid()}`; const cwThumbs = `cw-${uuid()}`; - const additionalCompanionWindowIds = (companionWindows || []).map(e => `cw-${uuid()}`); + + const defaultCompanionWindows = [ + { + content: 'thumbnailNavigation', + default: true, + id: cwThumbs, + position: options.thumbnailNavigationPosition + || config.thumbnailNavigation.defaultPosition, + }, + ...( + (companionWindows || []).map((cw, i) => ({ ...cw, id: `cw-${uuid()}` })) + ), + ]; + + if (config.window.defaultSideBarPanel) { + defaultCompanionWindows.unshift( + { + content: config.window.defaultSideBarPanel, + default: true, + id: `cw-${uuid()}`, + position: 'left', + }, + ); + } + const defaultOptions = { canvasId: undefined, collectionIndex: 0, companionAreaOpen: true, - companionWindowIds: [cwDefault, cwThumbs, ...additionalCompanionWindowIds], + companionWindowIds: defaultCompanionWindows.map(cw => cw.id), displayAllAnnotations: config.displayAllAnnotations || false, draggingEnabled: true, id: `window-${uuid()}`, @@ -59,7 +82,7 @@ export function addWindow({ companionWindows, ...options }) { rangeId: null, rotation: null, selectedAnnotations: {}, - sideBarOpen: config.window.sideBarOpenByDefault, + sideBarOpen: config.window.defaultSideBarPanel && config.window.sideBarOpenByDefault, sideBarPanel: config.window.defaultSideBarPanel, thumbnailNavigationId: cwThumbs, }; @@ -72,24 +95,7 @@ export function addWindow({ companionWindows, ...options }) { }; dispatch({ - companionWindows: [ - { - content: config.window.defaultSideBarPanel, - default: true, - id: cwDefault, - position: 'left', - }, - { - content: 'thumbnailNavigation', - default: true, - id: cwThumbs, - position: options.thumbnailNavigationPosition - || config.thumbnailNavigation.defaultPosition, - }, - ...( - (companionWindows || []).map((cw, i) => ({ ...cw, id: additionalCompanionWindowIds[i] })) - ), - ], + companionWindows: defaultCompanionWindows, elasticLayout, type: ActionTypes.ADD_WINDOW, window: { ...defaultOptions, ...options },