Commit d07b4f3301af0a9957493aa774313ba8dc4436c9
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 | } |