forked from cybrespace/mastodon
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
This commit is contained in:
parent
0d9ffe56fb
commit
dc88d226e1
|
@ -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'])),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue