soiz1's picture
Upload 2891 files
6bcb42f verified
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import Popover from 'react-popover';
import {injectIntl, intlShape, defineMessages, FormattedMessage} from 'react-intl';
import Label from '../forms/label.jsx';
import Input from '../forms/input.jsx';
import BufferedInputHOC from '../forms/buffered-input-hoc.jsx';
import Dial from './dial.jsx';
import styles from './direction-picker.css';
import allAroundIcon from './icon--all-around.svg';
import leftRightIcon from './icon--left-right.svg';
import upDownIcon from './icon--up-down.svg';
import dontRotateIcon from './icon--dont-rotate.svg';
import lookAtIcon from './icon--look-at.svg';
const BufferedInput = BufferedInputHOC(Input);
const directionLabel = (
<FormattedMessage
defaultMessage="Direction"
description="Sprite info direction label"
id="gui.SpriteInfo.direction"
/>
);
const RotationStyles = {
ALL_AROUND: 'all around',
LOOK_AT: 'look at',
LEFT_RIGHT: 'left-right',
UP_DOWN: 'up-down',
DONT_ROTATE: "don't rotate",
};
const messages = defineMessages({
allAround: {
id: 'gui.directionPicker.rotationStyles.allAround',
description: 'Button to change to the all around rotation style',
defaultMessage: 'All Around'
},
lookAt: {
id: 'gui.directionPicker.rotationStyles.lookAt',
description: 'Button to change to the look at rotation style',
defaultMessage: 'Look At'
},
leftRight: {
id: 'gui.directionPicker.rotationStyles.leftRight',
description: 'Button to change to the left-right rotation style',
defaultMessage: 'Left/Right'
},
upDown: {
id: 'gui.directionPicker.rotationStyles.upDown',
description: 'Button to change to the up-down rotation style',
defaultMessage: 'Up/Down'
},
dontRotate: {
id: 'gui.directionPicker.rotationStyles.dontRotate',
description: 'Button to change to the dont rotate rotation style',
defaultMessage: 'Do not rotate'
}
});
const DirectionPicker = props => (
<Label
secondary
above={props.labelAbove}
text={directionLabel}
>
<Popover
body={
<div>
<Dial
direction={props.direction}
onChange={props.onChangeDirection}
/>
<div className={styles.buttonRow}>
<button
className={classNames(styles.iconButton, {
[styles.active]: props.rotationStyle === RotationStyles.ALL_AROUND
})}
title={props.intl.formatMessage(messages.allAround)}
onClick={props.onClickAllAround}
>
<img
draggable={false}
src={allAroundIcon}
/>
</button>
<button
className={classNames(styles.iconButton, {
[styles.active]: props.rotationStyle === RotationStyles.LOOK_AT
})}
title={props.intl.formatMessage(messages.lookAt)}
onClick={props.onClickLookAt}
>
<img
draggable={false}
src={lookAtIcon}
/>
</button>
<button
className={classNames(styles.iconButton, {
[styles.active]: props.rotationStyle === RotationStyles.LEFT_RIGHT
})}
title={props.intl.formatMessage(messages.leftRight)}
onClick={props.onClickLeftRight}
>
<img
draggable={false}
src={leftRightIcon}
/>
</button>
<button
className={classNames(styles.iconButton, {
[styles.active]: props.rotationStyle === RotationStyles.UP_DOWN
})}
title={props.intl.formatMessage(messages.upDown)}
onClick={props.onClickUpDown}
>
<img
draggable={false}
src={upDownIcon}
/>
</button>
<button
className={classNames(styles.iconButton, {
[styles.active]: props.rotationStyle === RotationStyles.DONT_ROTATE
})}
title={props.intl.formatMessage(messages.dontRotate)}
onClick={props.onClickDontRotate}
>
<img
draggable={false}
src={dontRotateIcon}
/>
</button>
</div>
</div>
}
isOpen={props.popoverOpen}
preferPlace="above"
onOuterAction={props.onClosePopover}
>
<BufferedInput
small
disabled={props.disabled}
label={directionLabel}
tabIndex="0"
type="text"
value={props.disabled ? '' : props.direction}
onFocus={props.onOpenPopover}
onSubmit={props.onChangeDirection}
/>
</Popover>
</Label>
);
DirectionPicker.propTypes = {
direction: PropTypes.number,
disabled: PropTypes.bool.isRequired,
intl: intlShape,
labelAbove: PropTypes.bool,
onChangeDirection: PropTypes.func.isRequired,
onClickAllAround: PropTypes.func.isRequired,
onClickDontRotate: PropTypes.func.isRequired,
onClickLeftRight: PropTypes.func.isRequired,
onClickLookAt: PropTypes.func.isRequired,
onClickUpDown: PropTypes.func.isRequired,
onClosePopover: PropTypes.func.isRequired,
onOpenPopover: PropTypes.func.isRequired,
popoverOpen: PropTypes.bool.isRequired,
rotationStyle: PropTypes.string
};
DirectionPicker.defaultProps = {
labelAbove: false
};
const WrappedDirectionPicker = injectIntl(DirectionPicker);
export {
WrappedDirectionPicker as default,
RotationStyles
};