import PropTypes from 'prop-types'; import React from 'react'; import {connect} from 'react-redux'; import FixedToolsComponent from '../components/fixed-tools/fixed-tools.jsx'; import {changeMode} from '../reducers/modes'; import {changeFormat} from '../reducers/format'; import {clearSelectedItems, setSelectedItems} from '../reducers/selected-items'; import {deactivateEyeDropper} from '../reducers/eye-dropper'; import {setTextEditTarget} from '../reducers/text-edit-target'; import {setLayout} from '../reducers/layout'; import {getSelectedLeafItems} from '../helper/selection'; import {bringToFront, sendBackward, sendToBack, bringForward} from '../helper/order'; import {groupSelection, ungroupSelection} from '../helper/group'; import Formats, {isBitmap} from '../lib/format'; import bindAll from 'lodash.bindall'; class FixedTools extends React.Component { constructor (props) { super(props); bindAll(this, [ 'handleSendBackward', 'handleSendForward', 'handleSendToBack', 'handleSendToFront', 'handleSetSelectedItems', 'handleGroup', 'handleUngroup' ]); } handleGroup () { groupSelection(this.props.clearSelectedItems, this.handleSetSelectedItems, this.props.onUpdateImage); } handleUngroup () { ungroupSelection(this.props.clearSelectedItems, this.handleSetSelectedItems, this.props.onUpdateImage); } handleSendBackward () { sendBackward(this.props.onUpdateImage); } handleSendForward () { bringForward(this.props.onUpdateImage); } handleSendToBack () { sendToBack(this.props.onUpdateImage); } handleSendToFront () { bringToFront(this.props.onUpdateImage); } handleSetSelectedItems () { this.props.setSelectedItems(this.props.format); } render () { return ( ); } } FixedTools.propTypes = { canRedo: PropTypes.func.isRequired, canUndo: PropTypes.func.isRequired, clearSelectedItems: PropTypes.func.isRequired, format: PropTypes.oneOf(Object.keys(Formats)), name: PropTypes.string, onRedo: PropTypes.func.isRequired, onUndo: PropTypes.func.isRequired, onUpdateImage: PropTypes.func.isRequired, onUpdateName: PropTypes.func.isRequired, setSelectedItems: PropTypes.func.isRequired, width: PropTypes.number }; const mapStateToProps = state => ({ changeColorToEyeDropper: state.scratchPaint.color.eyeDropper.callback, format: state.scratchPaint.format, isEyeDropping: state.scratchPaint.color.eyeDropper.active, mode: state.scratchPaint.mode, pasteOffset: state.scratchPaint.clipboard.pasteOffset, previousTool: state.scratchPaint.color.eyeDropper.previousTool, selectedItems: state.scratchPaint.selectedItems, viewBounds: state.scratchPaint.viewBounds }); const mapDispatchToProps = dispatch => ({ changeMode: mode => { dispatch(changeMode(mode)); }, clearSelectedItems: () => { dispatch(clearSelectedItems()); }, handleSwitchToBitmap: () => { dispatch(changeFormat(Formats.BITMAP)); }, handleSwitchToVector: () => { dispatch(changeFormat(Formats.VECTOR)); }, removeTextEditTarget: () => { dispatch(setTextEditTarget()); }, setLayout: layout => { dispatch(setLayout(layout)); }, setSelectedItems: format => { dispatch(setSelectedItems(getSelectedLeafItems(), isBitmap(format))); }, onDeactivateEyeDropper: () => { // set redux values to default for eye dropper reducer dispatch(deactivateEyeDropper()); } }); export default connect( mapStateToProps, mapDispatchToProps )(FixedTools);