Track frequently used emojis in web UI (#5275)
* Track frequently used emojis in web UI * Persist emoji usage, but debounce commits to the settings API * Fix #5144 - Add tooltips to picker * Display only 2 lines of frequently used emojismaster
parent
0717d9b3e6
commit
488584bfc1
@ -0,0 +1,14 @@ |
||||
import { saveSettings } from './settings'; |
||||
|
||||
export const EMOJI_USE = 'EMOJI_USE'; |
||||
|
||||
export function useEmoji(emoji) { |
||||
return dispatch => { |
||||
dispatch({ |
||||
type: EMOJI_USE, |
||||
emoji, |
||||
}); |
||||
|
||||
dispatch(saveSettings()); |
||||
}; |
||||
}; |
@ -1,17 +1,42 @@ |
||||
import { connect } from 'react-redux'; |
||||
import EmojiPickerDropdown from '../components/emoji_picker_dropdown'; |
||||
import { changeSetting } from '../../../actions/settings'; |
||||
import { createSelector } from 'reselect'; |
||||
import { Map as ImmutableMap } from 'immutable'; |
||||
import { useEmoji } from '../../../actions/emojis'; |
||||
|
||||
const perLine = 8; |
||||
const lines = 2; |
||||
|
||||
const getFrequentlyUsedEmojis = createSelector([ |
||||
state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()), |
||||
], emojiCounters => emojiCounters |
||||
.keySeq() |
||||
.sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b)) |
||||
.reverse() |
||||
.slice(0, perLine * lines) |
||||
.toArray() |
||||
); |
||||
|
||||
const mapStateToProps = state => ({ |
||||
custom_emojis: state.get('custom_emojis'), |
||||
autoPlay: state.getIn(['meta', 'auto_play_gif']), |
||||
skinTone: state.getIn(['settings', 'skinTone']), |
||||
frequentlyUsedEmojis: getFrequentlyUsedEmojis(state), |
||||
}); |
||||
|
||||
const mapDispatchToProps = dispatch => ({ |
||||
const mapDispatchToProps = (dispatch, { onPickEmoji }) => ({ |
||||
onSkinTone: skinTone => { |
||||
dispatch(changeSetting(['skinTone'], skinTone)); |
||||
}, |
||||
|
||||
onPickEmoji: emoji => { |
||||
dispatch(useEmoji(emoji)); |
||||
|
||||
if (onPickEmoji) { |
||||
onPickEmoji(emoji); |
||||
} |
||||
}, |
||||
}); |
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(EmojiPickerDropdown); |
||||
|
Loading…
Reference in new issue