import React from "react"; import { connect } from "react-redux"; import PropTypes from "prop-types"; import classnames from "classnames"; import "../../../css/gen-window.css"; import { SET_FOCUSED_WINDOW } from "../../actionTypes"; import { scrollVolume, setWindowSize, closeWindow } from "../../actionCreators"; import { getWindowPixelSize } from "../../selectors"; import ResizeTarget from "../ResizeTarget"; const Text = ({ children }) => { const letters = children.split(""); return letters.map((letter, i) => (
)); }; const CHROME_WIDTH = 19; const CHROME_HEIGHT = 34; // Named export for testing export const GenWindow = ({ selected, children, close, title, setFocus, windowId, windowSize, setGenWindowSize, scrollVolume: handleWheel, width, height }) => { return (
setFocus(windowId)} onWheel={handleWheel} style={{ width, height }} >
{title}
close(windowId)} />
{children({ width: width - CHROME_WIDTH, height: height - CHROME_HEIGHT })}
setGenWindowSize(windowId, size)} id={"gen-resize-target"} />
); }; GenWindow.propTypes = { title: PropTypes.string.isRequired, windowId: PropTypes.string.isRequired, children: PropTypes.func.isRequired, close: PropTypes.func.isRequired, selected: PropTypes.bool.isRequired }; const mapStateToProps = (state, ownProps) => { const { width, height } = getWindowPixelSize(state, ownProps.windowId); return { width, height, selected: state.windows.focused === ownProps.windowId, windowSize: state.windows.genWindows[ownProps.windowId].size }; }; const mapDispatchToProps = { setFocus: windowId => ({ type: SET_FOCUSED_WINDOW, window: windowId }), close: windowId => closeWindow(windowId), setGenWindowSize: setWindowSize, scrollVolume }; export default connect( mapStateToProps, mapDispatchToProps )(GenWindow);