diff --git a/__tests__/src/components/WorkspaceExport.test.js b/__tests__/src/components/WorkspaceExport.test.js index 5d309538978c74c92b8463ebc3cc2a21b5c3ce92..c56584884e17accedb4ece1a198106896bddc0f4 100644 --- a/__tests__/src/components/WorkspaceExport.test.js +++ b/__tests__/src/components/WorkspaceExport.test.js @@ -5,14 +5,17 @@ import WorkspaceExport from '../../../src/components/WorkspaceExport'; describe('WorkspaceExport', () => { let wrapper; let handleClose; + let mockState; beforeEach(() => { handleClose = jest.fn(); + mockState = { windows: { }, config: { }, manifests: { } }; wrapper = shallow( <WorkspaceExport open handleClose={handleClose} + state={mockState} />, ); }); @@ -20,4 +23,13 @@ describe('WorkspaceExport', () => { it('renders without an error', () => { expect(wrapper.find('WithStyles(Dialog)').length).toBe(1); }); + + it('renders an exportable version of state', () => { + expect(wrapper.find('pre').length).toBe(1); + console.log(wrapper.find('pre').debug()); + debugger; // eslint-disable-line + expect(wrapper.find('pre').text()).toMatch('"config":'); + expect(wrapper.find('pre').text()).toMatch('"windows":'); + expect(wrapper.find('pre').text()).not.toMatch('"manifests":'); + }); }); diff --git a/src/components/WorkspaceExport.js b/src/components/WorkspaceExport.js index ec7be597b53f205f5d3000fe09abad3508b084fd..8bbbb6e50d81673d155a65185b5f002609ae9221 100644 --- a/src/components/WorkspaceExport.js +++ b/src/components/WorkspaceExport.js @@ -7,6 +7,19 @@ import PropTypes from 'prop-types'; /** */ class WorkspaceExport extends Component { + /** + * @private + */ + exportableState() { + const { state } = this.props; + const { config, windows } = state; + + return JSON.stringify({ + config, + windows, + }, null, 2); + } + /** * render * @return @@ -20,6 +33,9 @@ class WorkspaceExport extends Component { <DialogTitle id="form-dialog-title">Download/Export</DialogTitle> <DialogContent> {children} + <pre> + {this.exportableState()} + </pre> </DialogContent> </Dialog> ); @@ -30,6 +46,7 @@ WorkspaceExport.propTypes = { handleClose: PropTypes.func.isRequired, open: PropTypes.bool, // eslint-disable-line react/forbid-prop-types children: PropTypes.node, + state: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types }; WorkspaceExport.defaultProps = { diff --git a/src/components/WorkspaceMenu.js b/src/components/WorkspaceMenu.js index 2282803d3510bfc4420f556cdb3aceead2ed88e4..3b8b74a215e2907070ea19c1c0a3c8a901489bb9 100644 --- a/src/components/WorkspaceMenu.js +++ b/src/components/WorkspaceMenu.js @@ -10,7 +10,7 @@ import ViewHeadlineIcon from '@material-ui/icons/ViewHeadline'; import PropTypes from 'prop-types'; import WindowList from '../containers/WindowList'; import WorkspaceSettings from './WorkspaceSettings'; -import WorkspaceExport from './WorkspaceExport'; +import WorkspaceExport from '../containers/WorkspaceExport'; /** */ diff --git a/src/containers/WorkspaceExport.js b/src/containers/WorkspaceExport.js new file mode 100644 index 0000000000000000000000000000000000000000..a90a4670fb89a2dc0a37338be8349c198726f9ae --- /dev/null +++ b/src/containers/WorkspaceExport.js @@ -0,0 +1,17 @@ +import { compose } from 'redux'; +import { connect } from 'react-redux'; +import WorkspaceExport from '../components/WorkspaceExport'; + +/** + * mapStateToProps - to hook up connect + * @memberof Workspace + * @private + */ +const mapStateToProps = state => ({ state }); + +const enhance = compose( + connect(mapStateToProps, {}), + // further HOC go here +); + +export default enhance(WorkspaceExport);