Add showPreview props to Picker [Fix #42]

release
Etienne Lemay 2017-09-27 22:02:30 -04:00
parent 1159a0884c
commit c607fd8864
3 changed files with 13 additions and 4 deletions

View File

@ -39,6 +39,7 @@ import { Picker } from 'emoji-mart'
| **sheetSize** | | `64` | The emoji [sheet size](#sheet-sizes): `16, 20, 32, 64` | | **sheetSize** | | `64` | The emoji [sheet size](#sheet-sizes): `16, 20, 32, 64` |
| **backgroundImageFn** | | ```((set, sheetSize) => …)``` | A Fn that returns that image sheet to use for emojis. Useful for avoiding a request if you have the sheet locally. | | **backgroundImageFn** | | ```((set, sheetSize) => …)``` | A Fn that returns that image sheet to use for emojis. Useful for avoiding a request if you have the sheet locally. |
| **emojisToShowFilter** | | ```((emoji) => true)``` | A Fn to choose whether an emoji should be displayed or not | | **emojisToShowFilter** | | ```((emoji) => true)``` | A Fn to choose whether an emoji should be displayed or not |
| **showPreview** | | `true` | Display preview section |
| **skin** | | `1` | Default skin color: `1, 2, 3, 4, 5, 6` | | **skin** | | `1` | Default skin color: `1, 2, 3, 4, 5, 6` |
| **style** | | | Inline styles applied to the root element. Useful for positioning | | **style** | | | Inline styles applied to the root element. Useful for positioning |
| **title** | | `Emoji Mart™` | The title shown when no emojis are hovered | | **title** | | `Emoji Mart™` | The title shown when no emojis are hovered |

View File

@ -157,6 +157,8 @@ export default class Picker extends React.Component {
handleEmojiOver(emoji) { handleEmojiOver(emoji) {
var { preview } = this var { preview } = this
if (!preview) { return }
// Use Array.prototype.find() when it is more widely supported. // Use Array.prototype.find() when it is more widely supported.
const emojiData = CUSTOM_CATEGORY.emojis.filter(customEmoji => customEmoji.id === emoji.id)[0] const emojiData = CUSTOM_CATEGORY.emojis.filter(customEmoji => customEmoji.id === emoji.id)[0]
for (let key in emojiData) { for (let key in emojiData) {
@ -164,13 +166,16 @@ export default class Picker extends React.Component {
emoji[key] = emojiData[key] emoji[key] = emojiData[key]
} }
} }
preview.setState({ emoji }) preview.setState({ emoji })
clearTimeout(this.leaveTimeout) clearTimeout(this.leaveTimeout)
} }
handleEmojiLeave(emoji) { handleEmojiLeave(emoji) {
var { preview } = this
if (!preview) { return }
this.leaveTimeout = setTimeout(() => { this.leaveTimeout = setTimeout(() => {
var { preview } = this
preview.setState({ emoji: null }) preview.setState({ emoji: null })
}, 16) }, 16)
} }
@ -356,7 +361,7 @@ export default class Picker extends React.Component {
} }
render() { render() {
var { perLine, emojiSize, set, sheetSize, style, title, emoji, color, native, backgroundImageFn, emojisToShowFilter, include, exclude, autoFocus } = this.props, var { perLine, emojiSize, set, sheetSize, style, title, emoji, color, native, backgroundImageFn, emojisToShowFilter, showPreview, include, exclude, autoFocus } = this.props,
{ skin } = this.state, { skin } = this.state,
width = (perLine * (emojiSize + 12)) + 12 + 2 + measureScrollbar() width = (perLine * (emojiSize + 12)) + 12 + 2 + measureScrollbar()
@ -410,7 +415,7 @@ export default class Picker extends React.Component {
})} })}
</div> </div>
<div className='emoji-mart-bar'> {showPreview && <div className='emoji-mart-bar'>
<Preview <Preview
ref={this.setPreviewRef.bind(this)} ref={this.setPreviewRef.bind(this)}
title={title} title={title}
@ -428,7 +433,7 @@ export default class Picker extends React.Component {
onChange: this.handleSkinChange.bind(this) onChange: this.handleSkinChange.bind(this)
}} }}
/> />
</div> </div>}
</div> </div>
} }
} }
@ -448,6 +453,7 @@ Picker.propTypes = {
backgroundImageFn: Emoji.propTypes.backgroundImageFn, backgroundImageFn: Emoji.propTypes.backgroundImageFn,
sheetSize: Emoji.propTypes.sheetSize, sheetSize: Emoji.propTypes.sheetSize,
emojisToShowFilter: PropTypes.func, emojisToShowFilter: PropTypes.func,
showPreview: PropTypes.bool,
include: PropTypes.arrayOf(PropTypes.string), include: PropTypes.arrayOf(PropTypes.string),
exclude: PropTypes.arrayOf(PropTypes.string), exclude: PropTypes.arrayOf(PropTypes.string),
autoFocus: PropTypes.bool, autoFocus: PropTypes.bool,
@ -475,6 +481,7 @@ Picker.defaultProps = {
sheetSize: Emoji.defaultProps.sheetSize, sheetSize: Emoji.defaultProps.sheetSize,
backgroundImageFn: Emoji.defaultProps.backgroundImageFn, backgroundImageFn: Emoji.defaultProps.backgroundImageFn,
emojisToShowFilter: null, emojisToShowFilter: null,
showPreview: true,
autoFocus: false, autoFocus: false,
custom: [], custom: [],
} }

View File

@ -22,6 +22,7 @@ storiesOf('Picker', module)
emoji={text('Idle emoji', 'department_store')} emoji={text('Idle emoji', 'department_store')}
skin={number('Skin tone', 1)} skin={number('Skin tone', 1)}
color={color('Highlight color', '#ae65c5')} color={color('Highlight color', '#ae65c5')}
showPreview={boolean('Show preview', true)}
/> />
)); ));