dropdown_menu_container.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { connect } from 'react-redux';
  2. import { fetchRelationships } from 'mastodon/actions/accounts';
  3. import { openDropdownMenu, closeDropdownMenu } from '../actions/dropdown_menu';
  4. import { openModal, closeModal } from '../actions/modal';
  5. import DropdownMenu from '../components/dropdown_menu';
  6. import { isUserTouching } from '../is_mobile';
  7. /**
  8. * @param {import('mastodon/store').RootState} state
  9. */
  10. const mapStateToProps = state => ({
  11. openDropdownId: state.dropdownMenu.openId,
  12. openedViaKeyboard: state.dropdownMenu.keyboard,
  13. });
  14. const mapDispatchToProps = (dispatch, { status, items, scrollKey }) => ({
  15. onOpen(id, onItemClick, keyboard) {
  16. if (status) {
  17. dispatch(fetchRelationships([status.getIn(['account', 'id'])]));
  18. }
  19. dispatch(isUserTouching() ? openModal({
  20. modalType: 'ACTIONS',
  21. modalProps: {
  22. status,
  23. actions: items,
  24. onClick: onItemClick,
  25. },
  26. }) : openDropdownMenu({ id, keyboard, scrollKey }));
  27. },
  28. onClose(id) {
  29. dispatch(closeModal({
  30. modalType: 'ACTIONS',
  31. ignoreFocus: false,
  32. }));
  33. dispatch(closeDropdownMenu({ id }));
  34. },
  35. });
  36. export default connect(mapStateToProps, mapDispatchToProps)(DropdownMenu);