Commit d07b4f3301af0a9957493aa774313ba8dc4436c9

Authored by Sergio Crisostomo
1 parent 95eae081

fix logic for multiple picker

Showing 1 changed file with 14 additions and 6 deletions   Show diff stats
src/components/date-picker/picker.vue
@@ -265,8 +265,12 @@ @@ -265,8 +265,12 @@
265 }, 265 },
266 computed: { 266 computed: {
267 publicValue(){ 267 publicValue(){
268 - const isRange = this.type.includes('range');  
269 - return isRange ? this.formatDate(this.internalValue) : this.formatDate(this.internalValue[0]); 268 + if (this.multiple){
  269 + return this.internalValue.map(date => this.formatDate(date));
  270 + } else {
  271 + const isRange = this.type.includes('range');
  272 + return isRange ? this.formatDate(this.internalValue) : this.formatDate(this.internalValue[0]);
  273 + }
270 }, 274 },
271 275
272 opened () { 276 opened () {
@@ -284,8 +288,10 @@ @@ -284,8 +288,10 @@
284 }, 288 },
285 visualValue() { 289 visualValue() {
286 const value = this.internalValue; 290 const value = this.internalValue;
287 -  
288 if (!value) return; 291 if (!value) return;
  292 +
  293 + if (this.multiple) return value.map(date => this.formatDate(date)).join(', ');
  294 +
289 const formatter = ( 295 const formatter = (
290 TYPE_VALUE_RESOLVER_MAP[this.type] || 296 TYPE_VALUE_RESOLVER_MAP[this.type] ||
291 TYPE_VALUE_RESOLVER_MAP['default'] 297 TYPE_VALUE_RESOLVER_MAP['default']
@@ -294,7 +300,7 @@ @@ -294,7 +300,7 @@
294 return formatter(value, this.format || format); 300 return formatter(value, this.format || format);
295 }, 301 },
296 isConfirm(){ 302 isConfirm(){
297 - return this.confirm || this.type === 'datetime' || this.type === 'datetimerange'; 303 + return this.confirm || this.type === 'datetime' || this.type === 'datetimerange' || this.multiple;
298 } 304 }
299 }, 305 },
300 methods: { 306 methods: {
@@ -393,8 +399,10 @@ @@ -393,8 +399,10 @@
393 }, 399 },
394 onPick(dates, visible = false) { 400 onPick(dates, visible = false) {
395 401
396 - if (this.type === 'multiple'){  
397 - this.internalValue = [...this.internalValue, dates]; // TODO: filter multiple date duplicates 402 + if (this.multiple){
  403 + const allDates = [...this.internalValue, dates].filter(Boolean);
  404 + const timeStamps = allDates.map(date => date.getTime()).filter((ts, i, arr) => arr.indexOf(ts) === i); // filter away duplicates
  405 + this.internalValue = timeStamps.map(ts => new Date(ts));
398 } else { 406 } else {
399 this.internalValue = Array.isArray(dates) ? dates : [dates]; 407 this.internalValue = Array.isArray(dates) ? dates : [dates];
400 } 408 }