Commit 5426dcf989a12b5b99458cf6f0c498d3d0e778d4
1 parent
d9ff845f
fix specs, fix merge conflicts and cleanup
Showing
8 changed files
with
36 additions
and
17 deletions
Show diff stats
package-lock.json
@@ -7169,6 +7169,11 @@ | @@ -7169,6 +7169,11 @@ | ||
7169 | "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", | 7169 | "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", |
7170 | "dev": true | 7170 | "dev": true |
7171 | }, | 7171 | }, |
7172 | + "js-calendar": { | ||
7173 | + "version": "1.2.3", | ||
7174 | + "resolved": "https://registry.npmjs.org/js-calendar/-/js-calendar-1.2.3.tgz", | ||
7175 | + "integrity": "sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw==" | ||
7176 | + }, | ||
7172 | "js-tokens": { | 7177 | "js-tokens": { |
7173 | "version": "3.0.2", | 7178 | "version": "3.0.2", |
7174 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", | 7179 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", |
package.json
@@ -43,6 +43,7 @@ | @@ -43,6 +43,7 @@ | ||
43 | "async-validator": "^1.8.2", | 43 | "async-validator": "^1.8.2", |
44 | "deepmerge": "^1.5.2", | 44 | "deepmerge": "^1.5.2", |
45 | "element-resize-detector": "^1.1.13", | 45 | "element-resize-detector": "^1.1.13", |
46 | + "js-calendar": "^1.2.3", | ||
46 | "lodash.throttle": "^4.1.1", | 47 | "lodash.throttle": "^4.1.1", |
47 | "popper.js": "^0.6.4", | 48 | "popper.js": "^0.6.4", |
48 | "tinycolor2": "^1.4.1" | 49 | "tinycolor2": "^1.4.1" |
src/components/date-picker/base/date-table.vue
src/components/date-picker/base/mixin.js
1 | 1 | ||
2 | +import {clearHours} from '../util'; | ||
3 | + | ||
2 | export default { | 4 | export default { |
3 | props: { | 5 | props: { |
4 | tableDate: { | 6 | tableDate: { |
@@ -36,7 +38,7 @@ export default { | @@ -36,7 +38,7 @@ export default { | ||
36 | methods: { | 38 | methods: { |
37 | handleClick (cell) { | 39 | handleClick (cell) { |
38 | if (cell.disabled) return; | 40 | if (cell.disabled) return; |
39 | - const newDate = cell.date; | 41 | + const newDate = new Date(clearHours(cell.date)); |
40 | 42 | ||
41 | this.$emit('on-pick', newDate); | 43 | this.$emit('on-pick', newDate); |
42 | this.$emit('on-pick-click'); | 44 | this.$emit('on-pick-click'); |
src/components/date-picker/panel/Date/date-range.vue
@@ -219,7 +219,6 @@ | @@ -219,7 +219,6 @@ | ||
219 | }; | 219 | }; |
220 | }, | 220 | }, |
221 | prevYear (panel) { | 221 | prevYear (panel) { |
222 | - console.log(this) | ||
223 | const increment = this.currentView === 'year' ? -10 : -1; | 222 | const increment = this.currentView === 'year' ? -10 : -1; |
224 | this.changePanelDate(panel, 'FullYear', increment); | 223 | this.changePanelDate(panel, 'FullYear', increment); |
225 | }, | 224 | }, |
src/components/date-picker/panel/Time/time-range.vue
@@ -132,7 +132,7 @@ | @@ -132,7 +132,7 @@ | ||
132 | 132 | ||
133 | // set dateStart | 133 | // set dateStart |
134 | Object.keys(start).forEach(type => { | 134 | Object.keys(start).forEach(type => { |
135 | - dateStart[`set${capitalize(type)}`](start[type]) | 135 | + dateStart[`set${capitalize(type)}`](start[type]); |
136 | }); | 136 | }); |
137 | 137 | ||
138 | // set dateEnd | 138 | // set dateEnd |
src/components/date-picker/util.js
@@ -222,7 +222,6 @@ export const TYPE_VALUE_RESOLVER_MAP = { | @@ -222,7 +222,6 @@ export const TYPE_VALUE_RESOLVER_MAP = { | ||
222 | }, | 222 | }, |
223 | multiple: { | 223 | multiple: { |
224 | formatter: (value, format) => { | 224 | formatter: (value, format) => { |
225 | - console.log(value, format); | ||
226 | return value.filter(Boolean).map(date => formatDate(date, format)).join(','); | 225 | return value.filter(Boolean).map(date => formatDate(date, format)).join(','); |
227 | }, | 226 | }, |
228 | parser: (text, format) => text.split(',').map(string => parseDate(string.trim(), format)) | 227 | parser: (text, format) => text.split(',').map(string => parseDate(string.trim(), format)) |
test/unit/specs/date-picker.spec.js
@@ -11,7 +11,7 @@ describe('DatePicker.vue', () => { | @@ -11,7 +11,7 @@ describe('DatePicker.vue', () => { | ||
11 | <Date-Picker></Date-Picker> | 11 | <Date-Picker></Date-Picker> |
12 | `); | 12 | `); |
13 | const picker = vm.$children[0]; | 13 | const picker = vm.$children[0]; |
14 | - picker.showPicker(); | 14 | + picker.$el.querySelector('input.ivu-input').focus(); |
15 | vm.$nextTick(() => { | 15 | vm.$nextTick(() => { |
16 | const calendarBody = vm.$el.querySelector('.ivu-picker-panel-body .ivu-date-picker-cells:first-of-type'); | 16 | const calendarBody = vm.$el.querySelector('.ivu-picker-panel-body .ivu-date-picker-cells:first-of-type'); |
17 | const calendarCells = [...calendarBody.querySelectorAll('.ivu-date-picker-cells-cell')].filter(el => { | 17 | const calendarCells = [...calendarBody.querySelectorAll('.ivu-date-picker-cells-cell')].filter(el => { |
@@ -20,7 +20,7 @@ describe('DatePicker.vue', () => { | @@ -20,7 +20,7 @@ describe('DatePicker.vue', () => { | ||
20 | return !prevMonth && !nextMonth; | 20 | return !prevMonth && !nextMonth; |
21 | }); | 21 | }); |
22 | const today = new Date(); | 22 | const today = new Date(); |
23 | - const daysInCurrentMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0).getDate(); | 23 | + const daysInCurrentMonth = new Date(today.getFullYear(), today.getMonth(), 0).getDate(); |
24 | expect(daysInCurrentMonth).to.equal(calendarCells.length); | 24 | expect(daysInCurrentMonth).to.equal(calendarCells.length); |
25 | done(); | 25 | done(); |
26 | }); | 26 | }); |
@@ -32,7 +32,7 @@ describe('DatePicker.vue', () => { | @@ -32,7 +32,7 @@ describe('DatePicker.vue', () => { | ||
32 | `); | 32 | `); |
33 | const picker = vm.$children[0]; | 33 | const picker = vm.$children[0]; |
34 | expect(picker.$children.length).to.equal(2); | 34 | expect(picker.$children.length).to.equal(2); |
35 | - expect(Array.isArray(picker.currentValue)).to.equal(true); | 35 | + expect(Array.isArray(picker.internalValue)).to.equal(true); |
36 | done(); | 36 | done(); |
37 | }); | 37 | }); |
38 | 38 | ||
@@ -61,10 +61,17 @@ describe('DatePicker.vue', () => { | @@ -61,10 +61,17 @@ describe('DatePicker.vue', () => { | ||
61 | dayFive.setHours(0, 0, 0, 0); | 61 | dayFive.setHours(0, 0, 0, 0); |
62 | 62 | ||
63 | // check pickers internal value | 63 | // check pickers internal value |
64 | - const [startInternalValue, endInternalValue] = picker.currentValue; // Date Objects | 64 | + const [startInternalValue, endInternalValue] = picker.internalValue; // Date Objects |
65 | expect(Math.abs(dayOne - startInternalValue)).to.equal(0); | 65 | expect(Math.abs(dayOne - startInternalValue)).to.equal(0); |
66 | expect(Math.abs(dayFive - endInternalValue)).to.equal(0); | 66 | expect(Math.abs(dayFive - endInternalValue)).to.equal(0); |
67 | 67 | ||
68 | + /* | ||
69 | + const [startInternalValue, endInternalValue] = picker.internalValue; // Date Objects | ||
70 | + expect(dateToString(dayOne)).to.equal(dateToString(startInternalValue)); | ||
71 | + expect(dateToString(dayFive)).to.equal(dateToString(endInternalValue)); | ||
72 | + | ||
73 | + */ | ||
74 | + | ||
68 | // check pickers display value | 75 | // check pickers display value |
69 | const [startDisplayValue, endDisplayValue] = displayField.value.split(' - ').map(stringToDate); // Date Objects | 76 | const [startDisplayValue, endDisplayValue] = displayField.value.split(' - ').map(stringToDate); // Date Objects |
70 | expect(Math.abs(dayOne - startDisplayValue)).to.equal(0); | 77 | expect(Math.abs(dayOne - startDisplayValue)).to.equal(0); |
@@ -77,6 +84,7 @@ describe('DatePicker.vue', () => { | @@ -77,6 +84,7 @@ describe('DatePicker.vue', () => { | ||
77 | }); | 84 | }); |
78 | 85 | ||
79 | it('should change type progamatically', done => { | 86 | it('should change type progamatically', done => { |
87 | + // https://jsfiddle.net/hq7cLz83/ | ||
80 | vm = createVue({ | 88 | vm = createVue({ |
81 | template: '<Date-picker :type="dateType"></Date-picker>', | 89 | template: '<Date-picker :type="dateType"></Date-picker>', |
82 | data() { | 90 | data() { |
@@ -94,9 +102,9 @@ describe('DatePicker.vue', () => { | @@ -94,9 +102,9 @@ describe('DatePicker.vue', () => { | ||
94 | const monthPanel = panel.querySelector('.ivu-date-picker-cells-month'); | 102 | const monthPanel = panel.querySelector('.ivu-date-picker-cells-month'); |
95 | const yearPanel = panel.querySelector('.ivu-date-picker-cells-year'); | 103 | const yearPanel = panel.querySelector('.ivu-date-picker-cells-year'); |
96 | 104 | ||
97 | - expect(dayPanel.style.display).to.equal('none'); | 105 | + expect(dayPanel).to.equal(null); |
98 | expect(monthPanel.style.display).to.equal(''); | 106 | expect(monthPanel.style.display).to.equal(''); |
99 | - expect(yearPanel.style.display).to.equal('none'); | 107 | + expect(yearPanel).to.equal(null); |
100 | 108 | ||
101 | expect(picker.type).to.equal('month'); | 109 | expect(picker.type).to.equal('month'); |
102 | expect(picker.selectionMode).to.equal('month'); | 110 | expect(picker.selectionMode).to.equal('month'); |
@@ -104,6 +112,11 @@ describe('DatePicker.vue', () => { | @@ -104,6 +112,11 @@ describe('DatePicker.vue', () => { | ||
104 | vm.dateType = 'year'; | 112 | vm.dateType = 'year'; |
105 | promissedTick(picker) | 113 | promissedTick(picker) |
106 | .then(() => { | 114 | .then(() => { |
115 | + const yearPanel = panel.querySelector('.ivu-date-picker-cells-year'); | ||
116 | + const monthPanel = panel.querySelector('.ivu-date-picker-cells-month'); | ||
117 | + expect(yearPanel.style.display).to.equal(''); | ||
118 | + expect(monthPanel).to.equal(null); | ||
119 | + | ||
107 | expect(picker.type).to.equal('year'); | 120 | expect(picker.type).to.equal('year'); |
108 | expect(picker.selectionMode).to.equal('year'); | 121 | expect(picker.selectionMode).to.equal('year'); |
109 | 122 | ||
@@ -112,10 +125,10 @@ describe('DatePicker.vue', () => { | @@ -112,10 +125,10 @@ describe('DatePicker.vue', () => { | ||
112 | }) | 125 | }) |
113 | .then(() => { | 126 | .then(() => { |
114 | expect(picker.type).to.equal('date'); | 127 | expect(picker.type).to.equal('date'); |
115 | - expect(picker.selectionMode).to.equal('day'); | 128 | + expect(picker.selectionMode).to.equal('date'); |
116 | 129 | ||
117 | done(); | 130 | done(); |
118 | - }); | 131 | + }).catch(err => console.log(err)); |
119 | }); | 132 | }); |
120 | }); | 133 | }); |
121 | 134 | ||
@@ -170,7 +183,7 @@ describe('DatePicker.vue', () => { | @@ -170,7 +183,7 @@ describe('DatePicker.vue', () => { | ||
170 | clickableCells[firstDayInMonthIndex + 4].firstElementChild.click(); | 183 | clickableCells[firstDayInMonthIndex + 4].firstElementChild.click(); |
171 | vm.$nextTick(() => { | 184 | vm.$nextTick(() => { |
172 | // cache first values | 185 | // cache first values |
173 | - const [startInternalValue, endInternalValue] = picker.currentValue; // Date Objects | 186 | + const [startInternalValue, endInternalValue] = picker.internalValue; // Date Objects |
174 | const [startDisplayValue, endDisplayValue] = displayField.value.split(' - ').map(stringToDate); // Date Objects | 187 | const [startDisplayValue, endDisplayValue] = displayField.value.split(' - ').map(stringToDate); // Date Objects |
175 | 188 | ||
176 | // clear picker | 189 | // clear picker |
@@ -183,7 +196,7 @@ describe('DatePicker.vue', () => { | @@ -183,7 +196,7 @@ describe('DatePicker.vue', () => { | ||
183 | 196 | ||
184 | vm.$nextTick(() => { | 197 | vm.$nextTick(() => { |
185 | expect(picker.visible).to.equal(true); | 198 | expect(picker.visible).to.equal(true); |
186 | - expect(JSON.stringify(picker.currentValue)).to.equal('[null,null]'); | 199 | + expect(JSON.stringify(picker.internalValue)).to.equal('[null,null]'); |
187 | expect(displayField.value).to.equal(''); | 200 | expect(displayField.value).to.equal(''); |
188 | 201 | ||
189 | clickableCells[firstDayInMonthIndex].firstElementChild.click(); | 202 | clickableCells[firstDayInMonthIndex].firstElementChild.click(); |
@@ -191,8 +204,8 @@ describe('DatePicker.vue', () => { | @@ -191,8 +204,8 @@ describe('DatePicker.vue', () => { | ||
191 | clickableCells[firstDayInMonthIndex + 4].firstElementChild.click(); | 204 | clickableCells[firstDayInMonthIndex + 4].firstElementChild.click(); |
192 | vm.$nextTick(() => { | 205 | vm.$nextTick(() => { |
193 | // recheck internal values | 206 | // recheck internal values |
194 | - expect(Math.abs(picker.currentValue[0] - startInternalValue)).to.equal(0); | ||
195 | - expect(Math.abs(picker.currentValue[1] - endInternalValue)).to.equal(0); | 207 | + expect(Math.abs(picker.internalValue[0] - startInternalValue)).to.equal(0); |
208 | + expect(Math.abs(picker.internalValue[1] - endInternalValue)).to.equal(0); | ||
196 | // recheck display value | 209 | // recheck display value |
197 | const [_startDisplayValue, _endDisplayValue] = displayField.value.split(' - ').map(stringToDate); // Date Objects | 210 | const [_startDisplayValue, _endDisplayValue] = displayField.value.split(' - ').map(stringToDate); // Date Objects |
198 | expect(Math.abs(_startDisplayValue - startDisplayValue)).to.equal(0); | 211 | expect(Math.abs(_startDisplayValue - startDisplayValue)).to.equal(0); |