From ab8d7c0680d7f75826277be4c8eea1ebd396be8a Mon Sep 17 00:00:00 2001 From: Gurgen Hayrapetyan Date: Thu, 16 Apr 2020 22:16:20 +0400 Subject: Fix Poll fetchPoll action not being debounced. (#13485) * Fix Poll fetchPoll action not being debounced. * Fix unused import in the Poll component --- app/javascript/mastodon/components/poll.js | 5 +++-- app/javascript/mastodon/containers/poll_container.js | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'app/javascript') diff --git a/app/javascript/mastodon/components/poll.js b/app/javascript/mastodon/components/poll.js index 7525a1030..29da52ae7 100644 --- a/app/javascript/mastodon/components/poll.js +++ b/app/javascript/mastodon/components/poll.js @@ -4,7 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { vote, fetchPoll } from 'mastodon/actions/polls'; +import { vote } from 'mastodon/actions/polls'; import Motion from 'mastodon/features/ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; import escapeTextContentForBrowser from 'escape-html'; @@ -30,6 +30,7 @@ class Poll extends ImmutablePureComponent { intl: PropTypes.object.isRequired, dispatch: PropTypes.func, disabled: PropTypes.bool, + refresh: PropTypes.func, }; state = { @@ -108,7 +109,7 @@ class Poll extends ImmutablePureComponent { return; } - this.props.dispatch(fetchPoll(this.props.poll.get('id'))); + this.props.refresh(); }; renderOption (option, optionIndex, showResults) { diff --git a/app/javascript/mastodon/containers/poll_container.js b/app/javascript/mastodon/containers/poll_container.js index cd7216de7..1c2e8d2a7 100644 --- a/app/javascript/mastodon/containers/poll_container.js +++ b/app/javascript/mastodon/containers/poll_container.js @@ -1,8 +1,21 @@ import { connect } from 'react-redux'; +import { debounce } from 'lodash'; + import Poll from 'mastodon/components/poll'; +import { fetchPoll } from 'mastodon/actions/polls'; + +const mapDispatchToProps = (dispatch, { pollId }) => ({ + refresh: debounce( + () => { + dispatch(fetchPoll(pollId)); + }, + 1000, + { leading: true }, + ), +}); const mapStateToProps = (state, { pollId }) => ({ poll: state.getIn(['polls', pollId]), }); -export default connect(mapStateToProps)(Poll); +export default connect(mapStateToProps, mapDispatchToProps)(Poll); -- cgit From 4849752a9cf5d8220e5d90f5f9ce24ed37abc2ed Mon Sep 17 00:00:00 2001 From: Gurgen Hayrapetyan Date: Thu, 16 Apr 2020 22:16:20 +0400 Subject: [Glitch] Fix Poll fetchPoll action not being debounced. Port ab8d7c0680d7f75826277be4c8eea1ebd396be8a to glitch-soc Signed-off-by: Thibaut Girka --- app/javascript/flavours/glitch/components/poll.js | 5 +++-- .../flavours/glitch/containers/poll_container.js | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'app/javascript') diff --git a/app/javascript/flavours/glitch/components/poll.js b/app/javascript/flavours/glitch/components/poll.js index 46fd1e8c0..088d93990 100644 --- a/app/javascript/flavours/glitch/components/poll.js +++ b/app/javascript/flavours/glitch/components/poll.js @@ -4,7 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { vote, fetchPoll } from 'flavours/glitch/actions/polls'; +import { vote } from 'flavours/glitch/actions/polls'; import Motion from 'flavours/glitch/util/optional_motion'; import spring from 'react-motion/lib/spring'; import escapeTextContentForBrowser from 'escape-html'; @@ -30,6 +30,7 @@ class Poll extends ImmutablePureComponent { intl: PropTypes.object.isRequired, dispatch: PropTypes.func, disabled: PropTypes.bool, + refresh: PropTypes.func, }; state = { @@ -108,7 +109,7 @@ class Poll extends ImmutablePureComponent { return; } - this.props.dispatch(fetchPoll(this.props.poll.get('id'))); + this.props.refresh(); }; renderOption (option, optionIndex, showResults) { diff --git a/app/javascript/flavours/glitch/containers/poll_container.js b/app/javascript/flavours/glitch/containers/poll_container.js index da93cc905..b90864354 100644 --- a/app/javascript/flavours/glitch/containers/poll_container.js +++ b/app/javascript/flavours/glitch/containers/poll_container.js @@ -1,8 +1,21 @@ import { connect } from 'react-redux'; +import { debounce } from 'lodash'; + import Poll from 'flavours/glitch/components/poll'; +import { fetchPoll } from 'flavours/glitch/actions/polls'; + +const mapDispatchToProps = (dispatch, { pollId }) => ({ + refresh: debounce( + () => { + dispatch(fetchPoll(pollId)); + }, + 1000, + { leading: true }, + ), +}); const mapStateToProps = (state, { pollId }) => ({ poll: state.getIn(['polls', pollId]), }); -export default connect(mapStateToProps)(Poll); +export default connect(mapStateToProps, mapDispatchToProps)(Poll); -- cgit From e12a5635da7de5a1c3b08b2ce420ee8a56ae4aff Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 17 Apr 2020 21:54:25 +0200 Subject: Fix not being able to vote (#13490) Fix regression introduced by ab8d7c0680d7f75826277be4c8eea1ebd396be8a --- app/javascript/mastodon/components/poll.js | 5 ++--- app/javascript/mastodon/containers/poll_container.js | 6 +++++- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'app/javascript') diff --git a/app/javascript/mastodon/components/poll.js b/app/javascript/mastodon/components/poll.js index 29da52ae7..41c99710f 100644 --- a/app/javascript/mastodon/components/poll.js +++ b/app/javascript/mastodon/components/poll.js @@ -4,7 +4,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { vote } from 'mastodon/actions/polls'; import Motion from 'mastodon/features/ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; import escapeTextContentForBrowser from 'escape-html'; @@ -28,9 +27,9 @@ class Poll extends ImmutablePureComponent { static propTypes = { poll: ImmutablePropTypes.map, intl: PropTypes.object.isRequired, - dispatch: PropTypes.func, disabled: PropTypes.bool, refresh: PropTypes.func, + onVote: PropTypes.func, }; state = { @@ -101,7 +100,7 @@ class Poll extends ImmutablePureComponent { return; } - this.props.dispatch(vote(this.props.poll.get('id'), Object.keys(this.state.selected))); + this.props.onVote(Object.keys(this.state.selected)); }; handleRefresh = () => { diff --git a/app/javascript/mastodon/containers/poll_container.js b/app/javascript/mastodon/containers/poll_container.js index 1c2e8d2a7..f40ba8fac 100644 --- a/app/javascript/mastodon/containers/poll_container.js +++ b/app/javascript/mastodon/containers/poll_container.js @@ -2,7 +2,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; import Poll from 'mastodon/components/poll'; -import { fetchPoll } from 'mastodon/actions/polls'; +import { fetchPoll, vote } from 'mastodon/actions/polls'; const mapDispatchToProps = (dispatch, { pollId }) => ({ refresh: debounce( @@ -12,6 +12,10 @@ const mapDispatchToProps = (dispatch, { pollId }) => ({ 1000, { leading: true }, ), + + onVote (choices) { + dispatch(vote(pollId, choices)); + }, }); const mapStateToProps = (state, { pollId }) => ({ -- cgit From 81ef26b67d01aaa693edbdcf7a8f2a6cdfd56920 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 17 Apr 2020 21:54:25 +0200 Subject: [Glitch] Fix not being able to vote Port e12a5635da7de5a1c3b08b2ce420ee8a56ae4aff to glitch-soc Signed-off-by: Thibaut Girka --- app/javascript/flavours/glitch/components/poll.js | 5 ++--- app/javascript/flavours/glitch/containers/poll_container.js | 6 +++++- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'app/javascript') diff --git a/app/javascript/flavours/glitch/components/poll.js b/app/javascript/flavours/glitch/components/poll.js index 088d93990..6f57c1950 100644 --- a/app/javascript/flavours/glitch/components/poll.js +++ b/app/javascript/flavours/glitch/components/poll.js @@ -4,7 +4,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { vote } from 'flavours/glitch/actions/polls'; import Motion from 'flavours/glitch/util/optional_motion'; import spring from 'react-motion/lib/spring'; import escapeTextContentForBrowser from 'escape-html'; @@ -28,9 +27,9 @@ class Poll extends ImmutablePureComponent { static propTypes = { poll: ImmutablePropTypes.map, intl: PropTypes.object.isRequired, - dispatch: PropTypes.func, disabled: PropTypes.bool, refresh: PropTypes.func, + onVote: PropTypes.func, }; state = { @@ -101,7 +100,7 @@ class Poll extends ImmutablePureComponent { return; } - this.props.dispatch(vote(this.props.poll.get('id'), Object.keys(this.state.selected))); + this.props.onVote(Object.keys(this.state.selected)); }; handleRefresh = () => { diff --git a/app/javascript/flavours/glitch/containers/poll_container.js b/app/javascript/flavours/glitch/containers/poll_container.js index b90864354..345351cc6 100644 --- a/app/javascript/flavours/glitch/containers/poll_container.js +++ b/app/javascript/flavours/glitch/containers/poll_container.js @@ -2,7 +2,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; import Poll from 'flavours/glitch/components/poll'; -import { fetchPoll } from 'flavours/glitch/actions/polls'; +import { fetchPoll, vote } from 'flavours/glitch/actions/polls'; const mapDispatchToProps = (dispatch, { pollId }) => ({ refresh: debounce( @@ -12,6 +12,10 @@ const mapDispatchToProps = (dispatch, { pollId }) => ({ 1000, { leading: true }, ), + + onVote (choices) { + dispatch(vote(pollId, choices)); + }, }); const mapStateToProps = (state, { pollId }) => ({ -- cgit