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
							
								
									e782fcef4f
								
							
						
					
					
						commit
						a55fd40802
					
				
					 1 changed files with 7 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -195,6 +195,12 @@ const expandMentions = status => {
 | 
			
		|||
  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) {
 | 
			
		||||
  switch(action.type) {
 | 
			
		||||
  case STORE_HYDRATE:
 | 
			
		||||
| 
						 | 
				
			
			@ -353,7 +359,7 @@ export default function compose(state = initialState, action) {
 | 
			
		|||
        map.set('poll', ImmutableMap({
 | 
			
		||||
          options: action.status.getIn(['poll', 'options']).map(x => x.get('title')),
 | 
			
		||||
          multiple: action.status.getIn(['poll', 'multiple']),
 | 
			
		||||
          expires_in: 24 * 3600,
 | 
			
		||||
          expires_in: expiresInFromExpiresAt(action.status.getIn(['poll', 'expires_at'])),
 | 
			
		||||
        }));
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue