Commit c2b7fed05fc774d4f681625ee3f6a6759d818bd7
1 parent
15457562
Reset panel selectionMode and positioning on blur
Showing
3 changed files
with
21 additions
and
10 deletions
Show diff stats
src/components/date-picker/panel/Date/date-range.vue
| @@ -185,26 +185,31 @@ | @@ -185,26 +185,31 @@ | ||
| 185 | const minDate = newVal[0] ? toDate(newVal[0]) : null; | 185 | const minDate = newVal[0] ? toDate(newVal[0]) : null; |
| 186 | const maxDate = newVal[1] ? toDate(newVal[1]) : null; | 186 | const maxDate = newVal[1] ? toDate(newVal[1]) : null; |
| 187 | this.dates = [minDate, maxDate].sort(); | 187 | this.dates = [minDate, maxDate].sort(); |
| 188 | - if (JSON.stringify(this.dates) === '[null,null]') { | ||
| 189 | - const leftPanelDate = this.startDate || new Date(); | ||
| 190 | - this.leftPanelDate = leftPanelDate, | ||
| 191 | - this.rightPanelDate = new Date(leftPanelDate.getFullYear(), leftPanelDate.getMonth() + 1, leftPanelDate.getDate()); | ||
| 192 | - } | ||
| 193 | 188 | ||
| 194 | this.rangeState = { | 189 | this.rangeState = { |
| 195 | from: this.dates[0], | 190 | from: this.dates[0], |
| 196 | to: this.dates[1], | 191 | to: this.dates[1], |
| 197 | selecting: false | 192 | selecting: false |
| 198 | }; | 193 | }; |
| 194 | + | ||
| 195 | + | ||
| 196 | + // set panels positioning | ||
| 197 | + const leftPanelDate = this.startDate || this.dates[0] || new Date(); | ||
| 198 | + this.leftPanelDate = leftPanelDate; | ||
| 199 | + const rightPanelDate = new Date(leftPanelDate.getFullYear(), leftPanelDate.getMonth() + 1, leftPanelDate.getDate()); | ||
| 200 | + this.rightPanelDate = this.splitPanels ? new Date(Math.max(this.dates[1], rightPanelDate)) : rightPanelDate; | ||
| 201 | + | ||
| 202 | + // reset stuff | ||
| 203 | + this.currentView = this.selectionMode || 'range'; | ||
| 204 | + this.leftPickerTable = `${this.currentView}-table`; | ||
| 205 | + this.rightPickerTable = `${this.currentView}-table`; | ||
| 206 | + | ||
| 199 | }, | 207 | }, |
| 200 | currentView(currentView){ | 208 | currentView(currentView){ |
| 201 | const leftMonth = this.leftPanelDate.getMonth(); | 209 | const leftMonth = this.leftPanelDate.getMonth(); |
| 202 | const rightMonth = this.rightPanelDate.getMonth(); | 210 | const rightMonth = this.rightPanelDate.getMonth(); |
| 203 | const isSameYear = this.leftPanelDate.getFullYear() === this.rightPanelDate.getFullYear(); | 211 | const isSameYear = this.leftPanelDate.getFullYear() === this.rightPanelDate.getFullYear(); |
| 204 | 212 | ||
| 205 | - this.leftPickerTable = `${currentView}-table`; | ||
| 206 | - this.rightPickerTable = `${currentView}-table`; | ||
| 207 | - | ||
| 208 | if (currentView === 'date' && isSameYear && leftMonth === rightMonth){ | 213 | if (currentView === 'date' && isSameYear && leftMonth === rightMonth){ |
| 209 | this.changePanelDate('right', 'Month', 1); | 214 | this.changePanelDate('right', 'Month', 1); |
| 210 | } | 215 | } |
| @@ -214,6 +219,10 @@ | @@ -214,6 +219,10 @@ | ||
| 214 | if (currentView === 'year' && isSameYear){ | 219 | if (currentView === 'year' && isSameYear){ |
| 215 | this.changePanelDate('right', 'FullYear', 10); | 220 | this.changePanelDate('right', 'FullYear', 10); |
| 216 | } | 221 | } |
| 222 | + }, | ||
| 223 | + selectionMode(type){ | ||
| 224 | + console.log('Selection type change!', type); | ||
| 225 | + this.currentView = type || 'range'; | ||
| 217 | } | 226 | } |
| 218 | }, | 227 | }, |
| 219 | methods: { | 228 | methods: { |
src/components/date-picker/panel/Date/date.vue
| @@ -139,9 +139,10 @@ | @@ -139,9 +139,10 @@ | ||
| 139 | value (newVal) { | 139 | value (newVal) { |
| 140 | this.dates = newVal; | 140 | this.dates = newVal; |
| 141 | if (JSON.stringify(newVal) === '[null]') this.panelDate = this.startDate || new Date(); | 141 | if (JSON.stringify(newVal) === '[null]') this.panelDate = this.startDate || new Date(); |
| 142 | - }, | ||
| 143 | - selectionMode(){ | 142 | + |
| 143 | + // reset stuff | ||
| 144 | this.currentView = this.selectionMode; | 144 | this.currentView = this.selectionMode; |
| 145 | + this.pickerTable = this.getTableType(this.currentView); | ||
| 145 | }, | 146 | }, |
| 146 | currentView (currentView) { | 147 | currentView (currentView) { |
| 147 | this.$emit('on-selection-mode-change', currentView); | 148 | this.$emit('on-selection-mode-change', currentView); |
src/components/date-picker/picker.vue
| @@ -237,6 +237,7 @@ | @@ -237,6 +237,7 @@ | ||
| 237 | }, | 237 | }, |
| 238 | handleBlur () { | 238 | handleBlur () { |
| 239 | this.visible = false; | 239 | this.visible = false; |
| 240 | + this.internalValue = this.internalValue.slice(); // trigger panel watchers to reset views | ||
| 240 | }, | 241 | }, |
| 241 | handleInputChange (event) { | 242 | handleInputChange (event) { |
| 242 | const isArrayValue = this.type.includes('range') || this.multiple; | 243 | const isArrayValue = this.type.includes('range') || this.multiple; |