@@ -68,7 +68,7 @@ export const withMultipleRanges = compose(
6868 passThrough : {
6969 ...passThrough ,
7070 Day : {
71- onClick : ( date ) => handleSelect ( date , { selected, ...props } ) ,
71+ onClick : ( date ) => handleSelect ( date , { selected, setDisplayIndex , ...props } ) ,
7272 handlers : {
7373 onMouseOver : ! isTouchDevice && props . selectionStart
7474 ? ( e ) => handleMouseOver ( e , { selected, ...props } )
@@ -101,34 +101,36 @@ function getSortedSelection({start, end}) {
101101 : { start : end , end : start } ;
102102}
103103
104- function handleSelect ( date , { onSelect, selected, selectionStart, setSelectionStart, selectionStartIdx, setSelectionStartIdx} ) {
104+ function handleSelect ( date , { onSelect, selected, selectionStart, setSelectionStart, selectionStartIdx, setSelectionStartIdx, setDisplayIndex } ) {
105105 const positionOfDate = determineIfDateAlreadySelected ( date , selected ) ;
106- const funcs = { onSelect, setSelectionStart, setSelectionStartIdx} ;
106+ const funcs = { onSelect, setSelectionStart, setSelectionStartIdx, setDisplayIndex } ;
107107
108108 if ( positionOfDate . value && ! selectionStart ) { //selecting an already defined range
109109 const selectedDate = selected [ positionOfDate . index ] ; //not clone so modding this is modding selected
110110 selectedDate . end = date ; //not possible to have start/end reversed when clicking on already set range
111111
112- updateSelectedState ( selectedDate . start , positionOfDate . index , selected , funcs ) ; //grab index of selected and set in state
112+ updateSelectedState ( positionOfDate . index , selectedDate . start , positionOfDate . index , selected , funcs ) ; //grab index of selected and set in state
113113 } else if ( selectionStart ) { //ending date range selection
114114 if ( positionOfDate . value === PositionTypes . START && ! ( date < selectionStart ) ) { //if in process and selecting start, assume they want to cancel
115- updateSelectedState ( null , null , [ ...selected . slice ( 0 , positionOfDate . index ) , ...selected . slice ( positionOfDate . index + 1 ) ] , funcs ) ;
115+ const displayIdx = positionOfDate . index > 0 ? positionOfDate . index - 1 : 0 ;
116+ updateSelectedState ( displayIdx , null , null , [ ...selected . slice ( 0 , positionOfDate . index ) , ...selected . slice ( positionOfDate . index + 1 ) ] , funcs ) ;
116117 } else {
117118 selected [ selectionStartIdx ] = { //modifying passed in object without clone due to immediate set state
118119 ...getSortedSelection ( {
119120 start : selectionStart ,
120121 end : date ,
121122 } ) ,
122123 } ;
123- updateSelectedState ( null , null , selected , funcs ) ;
124+ updateSelectedState ( positionOfDate . index , null , null , selected , funcs ) ;
124125 }
125126 } else { //starting new date range
126- updateSelectedState ( date , selected . length , selected . concat ( { eventType :EVENT_TYPES . START , start : date , end : date } ) , funcs ) //length accounts for increase due to concat
127+ updateSelectedState ( selected . length , date , selected . length , selected . concat ( { eventType :EVENT_TYPES . START , start : date , end : date } ) , funcs ) //length accounts for increase due to concat
127128 }
128129}
129130
130- function updateSelectedState ( selectStart , selectStartIdx , selected , { onSelect, setSelectionStart, setSelectionStartIdx} ) {
131+ function updateSelectedState ( displayIdx , selectStart , selectStartIdx , selected , { onSelect, setSelectionStart, setSelectionStartIdx, setDisplayIndex } ) {
131132 onSelect ( selected ) ;
133+ setDisplayIndex ( displayIdx ) ;
132134 setSelectionStart ( selectStart ) ;
133135 setSelectionStartIdx ( selectStartIdx ) ;
134136}
0 commit comments