diff --git a/__tests__/src/actions/companionWindow.test.js b/__tests__/src/actions/companionWindow.test.js index 183949b736913b742482af63cadf42810fb99f51..0e7a1df61a78a41829ee8243f8ea8825d870fc3b 100644 --- a/__tests__/src/actions/companionWindow.test.js +++ b/__tests__/src/actions/companionWindow.test.js @@ -90,9 +90,10 @@ describe('companionWindow actions', () => { describe('removeCompanionWindow', () => { it('should return correct action object', () => { - const action = actions.removeCompanionWindow('cw-123'); + const action = actions.removeCompanionWindow('window', 'cw-123'); expect(action.type).toBe(ActionTypes.REMOVE_COMPANION_WINDOW); expect(action.id).toBe('cw-123'); + expect(action.windowId).toBe('window'); }); }); }); diff --git a/__tests__/src/components/CompanionWindow.test.js b/__tests__/src/components/CompanionWindow.test.js index 3666ce275ee5e3ba83eb39dfee0b19bfc95c421f..a88faa33063a8730f3a60c4547a5a799daa610fe 100644 --- a/__tests__/src/components/CompanionWindow.test.js +++ b/__tests__/src/components/CompanionWindow.test.js @@ -45,7 +45,6 @@ describe('CompanionWindow', () => { const closeButton = companionWindow.find('WithStyles(IconButton)[aria-label="closeCompanionWindow"]'); closeButton.simulate('click'); expect(removeCompanionWindowEvent).toHaveBeenCalledTimes(1); - expect(removeCompanionWindowEvent).toHaveBeenCalledWith('x', 'abc123'); }); }); diff --git a/__tests__/src/reducers/windows.test.js b/__tests__/src/reducers/windows.test.js index d39aad6e4f52231ac67ffe8649af5fbfbf33ae02..a7ee9845d904003b18158d063270fe9ce40accb7 100644 --- a/__tests__/src/reducers/windows.test.js +++ b/__tests__/src/reducers/windows.test.js @@ -293,4 +293,23 @@ describe('windows reducer', () => { }, }); }); + + it('should handle REMOVE_COMPANION_WINDOW', () => { + // on the right, just tacks the new id on + expect(windowsReducer({ + abc123: { + id: 'abc123', + companionWindowIds: ['123', 'xyz'], + }, + }, { + type: ActionTypes.REMOVE_COMPANION_WINDOW, + id: 'xyz', + windowId: 'abc123', + })).toEqual({ + abc123: { + id: 'abc123', + companionWindowIds: ['123'], + }, + }); + }); }); diff --git a/src/components/CompanionWindow.js b/src/components/CompanionWindow.js index 86eb876822abe9362fb38b7741553253ab564e7a..b474e90faf63174b955908be5394a82cab079023 100644 --- a/src/components/CompanionWindow.js +++ b/src/components/CompanionWindow.js @@ -71,7 +71,7 @@ export class CompanionWindow extends Component { <IconButton aria-label={t('closeCompanionWindow')} className={classes.closeButton} - onClick={() => { onCloseClick(windowId, id); }} + onClick={onCloseClick} > <CloseIcon /> </IconButton> diff --git a/src/containers/CompanionWindow.js b/src/containers/CompanionWindow.js index b49ca85c4803c54a6d2ce43a4e97ef6572a577b5..ce99afa5d6175840757999568df21bb4ae1d1fe6 100644 --- a/src/containers/CompanionWindow.js +++ b/src/containers/CompanionWindow.js @@ -27,10 +27,12 @@ const mapStateToProps = (state, { id, windowId }) => { * @memberof CompanionWindow * @private */ -const mapDispatchToProps = { - onCloseClick: actions.closeCompanionWindow, - updateCompanionWindow: actions.updateCompanionWindow, -}; +const mapDispatchToProps = (dispatch, { windowId, id }) => ({ + onCloseClick: () => dispatch( + actions.removeCompanionWindow(windowId, id), + ), + updateCompanionWindow: (...args) => dispatch(actions.updateCompanionWindow(...args)), +}); /** * diff --git a/src/state/actions/companionWindow.js b/src/state/actions/companionWindow.js index 044bbc648e4e5811b361fa1b2534d186859f9b2d..02ef3a2737fe67911a4e476b25e77a189200194c 100644 --- a/src/state/actions/companionWindow.js +++ b/src/state/actions/companionWindow.js @@ -1,6 +1,5 @@ import uuid from 'uuid/v4'; import ActionTypes from './action-types'; -import { updateWindow } from './window'; const defaultProps = { content: null, @@ -34,18 +33,6 @@ export function updateCompanionWindow(windowId, id, payload) { } /** */ -export function removeCompanionWindow(id) { - return { type: ActionTypes.REMOVE_COMPANION_WINDOW, id }; -} - -/** -* Close companion window and remove reference from window -*/ -export function closeCompanionWindow(windowId, companionWindowId) { - return (dispatch, getState) => { - dispatch(removeCompanionWindow(companionWindowId)); - const companionWindowIds = getState().windows[windowId].companionWindowIds - .filter(id => id !== companionWindowId); - dispatch(updateWindow(windowId, { companionWindowIds })); - }; +export function removeCompanionWindow(windowId, id) { + return { type: ActionTypes.REMOVE_COMPANION_WINDOW, id, windowId }; } diff --git a/src/state/actions/window.js b/src/state/actions/window.js index ff246162c9c018f2b20b2b2709060b6ab018e5e4..cc195dfb2ccd2275419d3647a78abc01aa5c9a32 100644 --- a/src/state/actions/window.js +++ b/src/state/actions/window.js @@ -1,6 +1,5 @@ import uuid from 'uuid/v4'; import ActionTypes from './action-types'; -import { removeCompanionWindow } from './companionWindow'; /** * focusWindow - action creator diff --git a/src/state/reducers/windows.js b/src/state/reducers/windows.js index 8a08187677e67077b13efd5895d4dd9a639319da..9ac1ce28af442ddbac7bf5c3dd2c0de172e64c50 100644 --- a/src/state/reducers/windows.js +++ b/src/state/reducers/windows.js @@ -117,6 +117,15 @@ export const windowsReducer = (state = {}, action) => { companionWindowIds: state[action.windowId].companionWindowIds.concat([action.id]), }, }; + case ActionTypes.REMOVE_COMPANION_WINDOW: + return { + ...state, + [action.windowId]: { + ...state[action.windowId], + companionWindowIds: state[action.windowId] + .companionWindowIds.filter(id => id !== action.id), + }, + }; default: return state; }