Commit 4863a75d921275e5c35f09777d55335ac610aabb

Authored by Sergio Crisostomo
1 parent 77e43f2b

Correct logic when manually inputing disabledDates

src/components/date-picker/picker.vue
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 <div ref="reference" :class="[prefixCls + '-rel']"> 3 <div ref="reference" :class="[prefixCls + '-rel']">
4 <slot> 4 <slot>
5 <i-input 5 <i-input
  6 + :key="forceInputRerender"
6 :element-id="elementId" 7 :element-id="elementId"
7 :class="[prefixCls + '-editor']" 8 :class="[prefixCls + '-editor']"
8 :readonly="!editable || readonly" 9 :readonly="!editable || readonly"
@@ -264,6 +265,10 @@ @@ -264,6 +265,10 @@
264 return val === '' || val === null || !isNaN(date.getTime()); 265 return val === '' || val === null || !isNaN(date.getTime());
265 } 266 }
266 } 267 }
  268 + },
  269 + options: {
  270 + type: Object,
  271 + default: () => ({})
267 } 272 }
268 }, 273 },
269 data(){ 274 data(){
@@ -274,7 +279,8 @@ @@ -274,7 +279,8 @@
274 internalValue: this.parseDate(this.value), 279 internalValue: this.parseDate(this.value),
275 disableClickOutSide: false, // fixed when click a date,trigger clickoutside to close picker 280 disableClickOutSide: false, // fixed when click a date,trigger clickoutside to close picker
276 disableCloseUnderTransfer: false, // transfer 模式下,点击Drop也会触发关闭, 281 disableCloseUnderTransfer: false, // transfer 模式下,点击Drop也会触发关闭,
277 - selectionMode: this.onSelectionModeChange(this.type) 282 + selectionMode: this.onSelectionModeChange(this.type),
  283 + forceInputRerender: 1
278 }; 284 };
279 }, 285 },
280 computed: { 286 computed: {
@@ -287,7 +293,6 @@ @@ -287,7 +293,6 @@
287 return (isRange || this.multiple) ? val : val[0]; 293 return (isRange || this.multiple) ? val : val[0];
288 } 294 }
289 }, 295 },
290 -  
291 opened () { 296 opened () {
292 return this.open === null ? this.visible : this.open; 297 return this.open === null ? this.visible : this.open;
293 }, 298 },
@@ -341,12 +346,21 @@ @@ -341,12 +346,21 @@
341 this.visible = false; 346 this.visible = false;
342 }, 347 },
343 handleInputChange (event) { 348 handleInputChange (event) {
  349 + const isArrayValue = this.type.includes('range') || this.multiple;
344 const oldValue = this.visualValue; 350 const oldValue = this.visualValue;
345 const newValue = event.target.value; 351 const newValue = event.target.value;
  352 + const newDate = this.parseDate(newValue);
  353 + const disabledDateFn =
  354 + this.options &&
  355 + typeof this.options.disabledDate === 'function' &&
  356 + this.options.disabledDate;
  357 + const valueToTest = isArrayValue ? newDate : newDate[0];
346 358
347 - if (newValue !== oldValue) { 359 + if (newValue !== oldValue && !disabledDateFn(valueToTest)) {
348 this.emitChange(); 360 this.emitChange();
349 - this.internalValue = this.parseDate(newValue); 361 + this.internalValue = newDate;
  362 + } else {
  363 + this.forceInputRerender++;
350 } 364 }
351 }, 365 },
352 handleInputMouseenter () { 366 handleInputMouseenter () {
@@ -393,7 +407,7 @@ @@ -393,7 +407,7 @@
393 407
394 if (val && type === 'time' && !(val instanceof Date)) { 408 if (val && type === 'time' && !(val instanceof Date)) {
395 val = parser(val, this.format || DEFAULT_FORMATS[type]); 409 val = parser(val, this.format || DEFAULT_FORMATS[type]);
396 - } else if (type.match(/range$/)) { 410 + } else if (isRange) {
397 if (!val){ 411 if (!val){
398 val = [null, null]; 412 val = [null, null];
399 } else { 413 } else {
@@ -403,8 +417,7 @@ @@ -403,8 +417,7 @@
403 } else if (typeof val === 'string' && type.indexOf('time') !== 0){ 417 } else if (typeof val === 'string' && type.indexOf('time') !== 0){
404 val = parser(val, this.format || DEFAULT_FORMATS[type]) || val; 418 val = parser(val, this.format || DEFAULT_FORMATS[type]) || val;
405 } 419 }
406 -  
407 - return isRange ? val : [val]; 420 + return (isRange || this.multiple) ? val : [val];
408 }, 421 },
409 formatDate(value){ 422 formatDate(value){
410 const {formatter} = ( 423 const {formatter} = (
src/components/date-picker/picker/date-picker.js
@@ -21,18 +21,7 @@ export default { @@ -21,18 +21,7 @@ export default {
21 return isRange ? 'RangeDatePickerPanel' : 'DatePickerPanel'; 21 return isRange ? 'RangeDatePickerPanel' : 'DatePickerPanel';
22 }, 22 },
23 ownPickerProps(){ 23 ownPickerProps(){
24 - return {}; 24 + return this.options;
25 } 25 }
26 }, 26 },
27 -/*  
28 - created () {  
29 - if (!this.currentValue) {  
30 - if (this.type === 'daterange' || this.type === 'datetimerange') {  
31 - this.currentValue = ['',''];  
32 - } else {  
33 - this.currentValue = '';  
34 - }  
35 - }  
36 - }  
37 -*/  
38 }; 27 };