Fix reply button on media modal not giving focus to compose form (#17626)
* Avoid compose form and modal management fighting for focus * Fix reply button on media modal footer not giving focus to compose form
This commit is contained in:
		
					parent
					
						
							
								d4592bbfcd
							
						
					
				
			
			
				commit
				
					
						2cd31b3177
					
				
			
		
					 7 changed files with 50 additions and 19 deletions
				
			
		|  | @ -3,16 +3,36 @@ import { TIMELINE_DELETE } from '../actions/timelines'; | |||
| import { COMPOSE_UPLOAD_CHANGE_SUCCESS } from '../actions/compose'; | ||||
| import { Stack as ImmutableStack, Map as ImmutableMap } from 'immutable'; | ||||
| 
 | ||||
| export default function modal(state = ImmutableStack(), action) { | ||||
| const initialState = ImmutableMap({ | ||||
|   ignoreFocus: false, | ||||
|   stack: ImmutableStack(), | ||||
| }); | ||||
| 
 | ||||
| const popModal = (state, { modalType, ignoreFocus }) => { | ||||
|   if (modalType === undefined || modalType === state.getIn(['stack', 0, 'modalType'])) { | ||||
|     return state.set('ignoreFocus', !!ignoreFocus).update('stack', stack => stack.shift()); | ||||
|   } else { | ||||
|     return state; | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| const pushModal = (state, modalType, modalProps) => { | ||||
|   return state.withMutations(map => { | ||||
|     map.set('ignoreFocus', false); | ||||
|     map.update('stack', stack => stack.unshift(ImmutableMap({ modalType, modalProps }))); | ||||
|   }); | ||||
| }; | ||||
| 
 | ||||
| export default function modal(state = initialState, action) { | ||||
|   switch(action.type) { | ||||
|   case MODAL_OPEN: | ||||
|     return state.unshift(ImmutableMap({ modalType: action.modalType, modalProps: action.modalProps })); | ||||
|     return pushModal(state, action.modalType, action.modalProps); | ||||
|   case MODAL_CLOSE: | ||||
|     return (action.modalType === undefined || action.modalType === state.getIn([0, 'modalType'])) ? state.shift() : state; | ||||
|     return popModal(state, action); | ||||
|   case COMPOSE_UPLOAD_CHANGE_SUCCESS: | ||||
|     return state.getIn([0, 'modalType']) === 'FOCAL_POINT' ? state.shift() : state; | ||||
|     return popModal(state, { modalType: 'FOCAL_POINT', ignoreFocus: false }); | ||||
|   case TIMELINE_DELETE: | ||||
|     return state.filterNot((modal) => modal.get('modalProps').statusId === action.id); | ||||
|     return state.update('stack', stack => stack.filterNot((modal) => modal.get('modalProps').statusId === action.id)); | ||||
|   default: | ||||
|     return state; | ||||
|   } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue