When deleting & redrafting a poll, fill in closest expires_in (#11203)

Use the smallest preset expires_in such that the new poll would
not expire before the old one.

In the typical case of a quick delete & redraft, this results in
using the same poll duration.

Fixes #10567
rebase/4.0.0rc2
ThibG 2019-07-02 00:36:16 +02:00 committed by Eugen Rochko
parent 0d9ffe56fb
commit dc88d226e1
1 changed files with 7 additions and 1 deletions

View File

@ -195,6 +195,12 @@ const expandMentions = status => {
return fragment.innerHTML; return fragment.innerHTML;
}; };
const expiresInFromExpiresAt = expires_at => {
if (!expires_at) return 24 * 3600;
const delta = (new Date(expires_at).getTime() - Date.now()) / 1000;
return [300, 1800, 3600, 21600, 86400, 259200, 604800].find(expires_in => expires_in >= delta) || 24 * 3600;
};
export default function compose(state = initialState, action) { export default function compose(state = initialState, action) {
switch(action.type) { switch(action.type) {
case STORE_HYDRATE: case STORE_HYDRATE:
@ -353,7 +359,7 @@ export default function compose(state = initialState, action) {
map.set('poll', ImmutableMap({ map.set('poll', ImmutableMap({
options: action.status.getIn(['poll', 'options']).map(x => x.get('title')), options: action.status.getIn(['poll', 'options']).map(x => x.get('title')),
multiple: action.status.getIn(['poll', 'multiple']), multiple: action.status.getIn(['poll', 'multiple']),
expires_in: 24 * 3600, expires_in: expiresInFromExpiresAt(action.status.getIn(['poll', 'expires_at'])),
})); }));
} }
}); });