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