1313 @drag =' dragValue = $event'
1414 @input =' updateValue'
1515 v-bind =' $attrs'
16- v-on =' $listeners '
16+ v-on =' filteredListeners() '
1717 v-if =' isInline' >
1818 </component >
1919 <popover
5050 :attributes =' attributes_'
5151 :date-validator =' dateValidator'
5252 @drag =' dragValue = $event'
53- @input =' popoverInput'
5453 v-bind =' $attrs'
55- v-on =' $listeners ' >
54+ v-on =' filteredListeners() ' >
5655 </component >
5756 </popover >
5857
@@ -65,7 +64,12 @@ import MultipleDatePicker from './MultipleDatePicker';
6564import DateRangePicker from ' ./DateRangePicker' ;
6665import DateInfo from ' ../utils/dateInfo' ;
6766import defaults from ' ../utils/defaults' ;
68- import { getDateComps , getNextPage , getMaxPage , blendColors } from ' ../utils/helpers' ;
67+ import {
68+ getDateComps ,
69+ getNextPage ,
70+ getMaxPage ,
71+ getLastArrayItem ,
72+ blendColors } from ' ../utils/helpers' ;
6973
7074export default {
7175 components: {
@@ -257,43 +261,58 @@ export default {
257261 toPage_ (val ) {
258262 this .$emit (' update:toPage' , val);
259263 },
260- dragValue (val ) {
261- // Forward drag event
262- this .$emit (' drag' , val);
263- },
264264 mode () {
265265 // Clear value on select mode change
266266 this .$emit (' input' , null );
267267 },
268268 suggestedInputText (val ) {
269269 this .valueText = val;
270270 },
271+ value () {
272+ if (! this .popoverKeepVisibleOnInput ) this .popoverForceHidden = true ;
273+ },
271274 },
272275 created () {
273276 this .assignPageRange ();
274277 this .valueText = this .suggestedInputText ;
275278 },
276279 methods: {
280+ filteredListeners () {
281+ // Remove parent listeners that we want to intercept and re-broadcast
282+ const listeners = { ... this .$listeners };
283+ delete listeners[' update:fromPage' ];
284+ delete listeners[' update:toPage' ];
285+ return listeners;
286+ },
277287 popoverDidDisappear () {
278288 this .assignPageRange ();
279289 },
280290 assignPageRange () {
281- if (this .value ) {
282- this .fromPage_ = this .value .start ? getDateComps (this .value .start ) : getDateComps (this .value );
283- if (this .value .end ) this .toPage_ = getMaxPage (getDateComps (this .value .end ), getNextPage (this .fromPage_ ));
291+ if (! this .value ) return ;
292+ switch (this .mode ) {
293+ case ' single' :
294+ this .fromPage_ = getDateComps (this .value );
295+ this .toPage_ = getNextPage (this .fromPage_ );
296+ break ;
297+ case ' multiple' :
298+ if (! this .value .length ) return ;
299+ this .fromPage_ = getDateComps (this .value [0 ]);
300+ this .toPage_ = getMaxPage (getDateComps (getLastArrayItem (this .value )), getNextPage (this .fromPage_ ));
301+ break ;
302+ case ' range' :
303+ if (! this .value .start || ! this .value .end ) return ;
304+ this .fromPage_ = getDateComps (this .value .start );
305+ this .toPage_ = getMaxPage (getDateComps (this .value .end ), getNextPage (this .fromPage_ ));
306+ break ;
307+ default :
284308 }
285309 },
286- popoverInput (e ) {
287- this .updateValue (e);
288- // if (!this.popoverKeepVisibleOnInput) this.popoverForceHidden = true;
289- },
290310 updateValue (value = this .valueText ) {
291311 if (typeof value === ' string' ) {
292312 this .$emit (' input' , this .parseValue (value));
293313 } else {
294314 this .$emit (' input' , value);
295315 }
296- if (! this .popoverKeepVisibleOnInput ) this .popoverForceHidden = true ;
297316 },
298317 parseValue (valueText ) {
299318 let value = null ;
0 commit comments