Skip to content

Commit 2fb9e67

Browse files
committed
feat: add pick event when date clicked (#429)
1 parent 2d50e75 commit 2fb9e67

File tree

5 files changed

+49
-11
lines changed

5 files changed

+49
-11
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ set fixed time list to select;
277277
| input-error | When user type a invalid Date | the input text |
278278
| focus | When input focus | |
279279
| blur | When input blur | |
280+
| pick | when select date [#429](issues/429) | date |
280281

281282
### Slots
282283

README.zh-CN.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -263,17 +263,18 @@ data() {
263263

264264
### 事件
265265

266-
| 名称 | 描述 | 回调函数的参数 |
267-
| ----------- | -------------------- | -------------------------------------------- |
268-
| input | 当选择日期的事件触发 | date |
269-
| change | 当选择日期的事件触发 | date, type(date, hour, minute, second, ampm) |
270-
| open | 当弹出层打开时候 | |
271-
| close | 当弹出层关闭时候 | |
272-
| confirm | 当点击确认按钮 | date |
273-
| clear | 当点击清除按钮 | |
274-
| input-error | 当输入一个无效的时间 | 输入的值 |
275-
| focus | 当输入框有焦点 | |
276-
| blur | 当输入框失焦 | |
266+
| 名称 | 描述 | 回调函数的参数 |
267+
| ----------- | ------------------------------- | -------------------------------------------- |
268+
| input | 当选择日期的事件触发 | date |
269+
| change | 当选择日期的事件触发 | date, type(date, hour, minute, second, ampm) |
270+
| open | 当弹出层打开时候 | |
271+
| close | 当弹出层关闭时候 | |
272+
| confirm | 当点击确认按钮 | date |
273+
| clear | 当点击清除按钮 | |
274+
| input-error | 当输入一个无效的时间 | 输入的值 |
275+
| focus | 当输入框有焦点 | |
276+
| blur | 当输入框失焦 | |
277+
| pick | 当点击日期时 [#429](issues/429) | date |
277278

278279
### Slots
279280

__test__/date-picker.test.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,4 +352,17 @@ describe('DatePicker', () => {
352352
expect(v.element.type).toBe('button');
353353
});
354354
});
355+
356+
it('should emit pick event on first click', () => {
357+
wrapper = mount(DatePicker, {
358+
range: true,
359+
propsData: {
360+
open: true,
361+
defaultValue: new Date(2019, 9, 1),
362+
},
363+
});
364+
const td = wrapper.find('.mx-table-date td');
365+
td.trigger('click');
366+
expect(wrapper.emitted().pick[0][0]).toEqual(new Date(2019, 8, 29));
367+
});
355368
});

src/calendar/calendar-panel.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ import TableDate from './table-date';
114114
import TableMonth from './table-month';
115115
import TableYear from './table-year';
116116
import { getLocaleFieldValue } from '../locale';
117+
import emitter from '../mixin/emitter';
117118
118119
export default {
119120
name: 'CalendarPanel',
@@ -122,6 +123,7 @@ export default {
122123
TableMonth,
123124
TableYear,
124125
},
126+
mixins: [emitter],
125127
inject: {
126128
t: {
127129
default: () => getLocaleFieldValue,
@@ -248,6 +250,8 @@ export default {
248250
emitDate(date, type) {
249251
if (!this.isDisabled(date)) {
250252
this.$emit('select', date, type);
253+
// someone need get the first selected date to set range value. (#429)
254+
this.dispatch('DatePicker', 'pick', date, type);
251255
}
252256
},
253257
updateCalendar(date) {

src/mixin/emitter.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export default {
2+
methods: {
3+
dispatch(componentName, ...params) {
4+
let parent = this.$parent || this.$root;
5+
let { name } = parent.$options;
6+
7+
while (parent && (!name || name !== componentName)) {
8+
parent = parent.$parent;
9+
10+
if (parent) {
11+
name = parent.$options.name;
12+
}
13+
}
14+
if (parent) {
15+
parent.$emit(...params);
16+
}
17+
},
18+
},
19+
};

0 commit comments

Comments
 (0)