Add skin support to picker
parent
e23d5ce53e
commit
035653cbca
|
@ -9,6 +9,7 @@ class Example extends React.Component {
|
||||||
this.state = {
|
this.state = {
|
||||||
emojiSize: 24,
|
emojiSize: 24,
|
||||||
perLine: 9,
|
perLine: 9,
|
||||||
|
skin: 1,
|
||||||
set: 'apple',
|
set: 'apple',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,6 +55,7 @@ class Example extends React.Component {
|
||||||
<br /><Operator><</Operator><Variable>Picker</Variable>
|
<br /><Operator><</Operator><Variable>Picker</Variable>
|
||||||
<br /> emojiSize<Operator>=</Operator>{<Variable>{this.state.emojiSize}</Variable>} <input type='range' data-key='emojiSize' onChange={this.handleInput.bind(this)} min='16' max='64' value={this.state.emojiSize} />
|
<br /> emojiSize<Operator>=</Operator>{<Variable>{this.state.emojiSize}</Variable>} <input type='range' data-key='emojiSize' onChange={this.handleInput.bind(this)} min='16' max='64' value={this.state.emojiSize} />
|
||||||
<br /> perLine<Operator>=</Operator>{<Variable>{this.state.perLine}</Variable>} {this.state.perLine < 10 ? ' ' : ' '} <input type='range' data-key='perLine' onChange={this.handleInput.bind(this)} min='5' max='16' value={this.state.perLine} />
|
<br /> perLine<Operator>=</Operator>{<Variable>{this.state.perLine}</Variable>} {this.state.perLine < 10 ? ' ' : ' '} <input type='range' data-key='perLine' onChange={this.handleInput.bind(this)} min='5' max='16' value={this.state.perLine} />
|
||||||
|
<br /> skin<Operator>=</Operator>{<Variable>{this.state.skin}</Variable>} <input type='range' data-key='skin' onChange={this.handleInput.bind(this)} min='1' max='6' value={this.state.skin} />
|
||||||
<br /> sheetURL<Operator>=</Operator><String>'images/sheet-{this.state.set}-64.png'</String>
|
<br /> sheetURL<Operator>=</Operator><String>'images/sheet-{this.state.set}-64.png'</String>
|
||||||
<br /> onClick<Operator>=</Operator>{(<Variable>emoji</Variable>) => console.log(<Variable>emoji</Variable>)}
|
<br /> onClick<Operator>=</Operator>{(<Variable>emoji</Variable>) => console.log(<Variable>emoji</Variable>)}
|
||||||
<br /><Operator>/></Operator>
|
<br /><Operator>/></Operator>
|
||||||
|
@ -62,6 +64,7 @@ class Example extends React.Component {
|
||||||
<Picker
|
<Picker
|
||||||
emojiSize={this.state.emojiSize}
|
emojiSize={this.state.emojiSize}
|
||||||
perLine={this.state.perLine}
|
perLine={this.state.perLine}
|
||||||
|
skin={this.state.skin}
|
||||||
sheetURL={`images/sheet-${this.state.set}-64.png`}
|
sheetURL={`images/sheet-${this.state.set}-64.png`}
|
||||||
onClick={(emoji) => console.log(emoji)}
|
onClick={(emoji) => console.log(emoji)}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -3,23 +3,52 @@ import data from '../../data'
|
||||||
|
|
||||||
const SHEET_SIZE = 2624
|
const SHEET_SIZE = 2624
|
||||||
const EMOJI_SIZE = 64
|
const EMOJI_SIZE = 64
|
||||||
|
const SKINS = [
|
||||||
|
'1F3FA', '1F3FB', '1F3FC',
|
||||||
|
'1F3FD', '1F3FE', '1F3FF',
|
||||||
|
]
|
||||||
|
|
||||||
export default class Emoji extends React.Component {
|
export default class Emoji extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props)
|
||||||
|
|
||||||
|
var emojiData = this.getEmojiData()
|
||||||
|
this.hasSkinVariations = !!emojiData.skin_variations
|
||||||
|
}
|
||||||
|
|
||||||
shouldComponentUpdate(nextProps) {
|
shouldComponentUpdate(nextProps) {
|
||||||
return (
|
return (
|
||||||
|
this.hasSkinVariations && nextProps.skin != this.props.skin ||
|
||||||
nextProps.size != this.props.size ||
|
nextProps.size != this.props.size ||
|
||||||
nextProps.sheetURL != this.props.sheetURL
|
nextProps.sheetURL != this.props.sheetURL
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
getEmojiData() {
|
getEmojiData() {
|
||||||
var { emoji } = this.props,
|
var { emoji, skin, sheetURL } = this.props,
|
||||||
emojiData = emoji
|
emojiData = emoji
|
||||||
|
|
||||||
if (typeof emoji == 'string') {
|
if (typeof emoji == 'string') {
|
||||||
emojiData = data.emojis[emoji]
|
emojiData = data.emojis[emoji]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.hasSkinVariations && skin > 1) {
|
||||||
|
emojiData = JSON.parse(JSON.stringify(data.emojis[emoji]))
|
||||||
|
|
||||||
|
var skinKey = SKINS[skin - 1],
|
||||||
|
variationKey = `${emojiData.unified}-${skinKey}`,
|
||||||
|
variationData = emojiData.skin_variations[variationKey],
|
||||||
|
kitMatches = sheetURL.match(/(apple|google|twitter|emojione)/),
|
||||||
|
kit = kitMatches[0]
|
||||||
|
|
||||||
|
if (variationData[`has_img_${kit}`]) {
|
||||||
|
for (let k in variationData) {
|
||||||
|
let v = variationData[k]
|
||||||
|
emojiData[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return emojiData
|
return emojiData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +91,7 @@ export default class Emoji extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
Emoji.propTypes = {
|
Emoji.propTypes = {
|
||||||
|
skin: React.PropTypes.number,
|
||||||
onOver: React.PropTypes.func,
|
onOver: React.PropTypes.func,
|
||||||
onLeave: React.PropTypes.func,
|
onLeave: React.PropTypes.func,
|
||||||
onClick: React.PropTypes.func,
|
onClick: React.PropTypes.func,
|
||||||
|
@ -74,6 +104,7 @@ Emoji.propTypes = {
|
||||||
}
|
}
|
||||||
|
|
||||||
Emoji.defaultProps = {
|
Emoji.defaultProps = {
|
||||||
|
skin: 1,
|
||||||
onOver: (() => {}),
|
onOver: (() => {}),
|
||||||
onLeave: (() => {}),
|
onLeave: (() => {}),
|
||||||
onClick: (() => {}),
|
onClick: (() => {}),
|
||||||
|
|
|
@ -67,7 +67,7 @@ export default class Picker extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
var { perLine, emojiSize, sheetURL } = this.props,
|
var { skin, perLine, emojiSize, sheetURL } = this.props,
|
||||||
width = (perLine * (emojiSize + 12)) + 12 + 2
|
width = (perLine * (emojiSize + 12)) + 12 + 2
|
||||||
|
|
||||||
return <div style={{width: width}} className='emoji-picker'>
|
return <div style={{width: width}} className='emoji-picker'>
|
||||||
|
@ -89,6 +89,7 @@ export default class Picker extends React.Component {
|
||||||
emojis={category.emojis}
|
emojis={category.emojis}
|
||||||
hasStickyPosition={this.hasStickyPosition}
|
hasStickyPosition={this.hasStickyPosition}
|
||||||
emojiProps={{
|
emojiProps={{
|
||||||
|
skin: skin,
|
||||||
size: emojiSize,
|
size: emojiSize,
|
||||||
sheetURL: sheetURL,
|
sheetURL: sheetURL,
|
||||||
onOver: this.handleEmojiOver.bind(this),
|
onOver: this.handleEmojiOver.bind(this),
|
||||||
|
@ -114,6 +115,7 @@ export default class Picker extends React.Component {
|
||||||
|
|
||||||
Picker.propTypes = {
|
Picker.propTypes = {
|
||||||
onClick: React.PropTypes.func,
|
onClick: React.PropTypes.func,
|
||||||
|
skin: React.PropTypes.number,
|
||||||
perLine: React.PropTypes.number,
|
perLine: React.PropTypes.number,
|
||||||
emojiSize: React.PropTypes.number,
|
emojiSize: React.PropTypes.number,
|
||||||
sheetURL: React.PropTypes.string.isRequired,
|
sheetURL: React.PropTypes.string.isRequired,
|
||||||
|
@ -123,4 +125,5 @@ Picker.defaultProps = {
|
||||||
onClick: (() => {}),
|
onClick: (() => {}),
|
||||||
emojiSize: 24,
|
emojiSize: 24,
|
||||||
perLine: 9,
|
perLine: 9,
|
||||||
|
skin: 1,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue