The code powering m.abunchtell.com https://m.abunchtell.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

43 lines
1.2 KiB

  1. import { connect } from 'react-redux';
  2. import EmojiPickerDropdown from '../components/emoji_picker_dropdown';
  3. import { changeSetting } from '../../../actions/settings';
  4. import { createSelector } from 'reselect';
  5. import { Map as ImmutableMap } from 'immutable';
  6. import { useEmoji } from '../../../actions/emojis';
  7. const perLine = 8;
  8. const lines = 2;
  9. const getFrequentlyUsedEmojis = createSelector([
  10. state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()),
  11. ], emojiCounters => emojiCounters
  12. .keySeq()
  13. .sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b))
  14. .reverse()
  15. .slice(0, perLine * lines)
  16. .toArray()
  17. );
  18. const mapStateToProps = state => ({
  19. custom_emojis: state.get('custom_emojis'),
  20. autoPlay: state.getIn(['meta', 'auto_play_gif']),
  21. skinTone: state.getIn(['settings', 'skinTone']),
  22. frequentlyUsedEmojis: getFrequentlyUsedEmojis(state),
  23. });
  24. const mapDispatchToProps = (dispatch, { onPickEmoji }) => ({
  25. onSkinTone: skinTone => {
  26. dispatch(changeSetting(['skinTone'], skinTone));
  27. },
  28. onPickEmoji: emoji => {
  29. dispatch(useEmoji(emoji));
  30. if (onPickEmoji) {
  31. onPickEmoji(emoji);
  32. }
  33. },
  34. });
  35. export default connect(mapStateToProps, mapDispatchToProps)(EmojiPickerDropdown);