Skip to content

Commit 48a2868

Browse files
authored
feat(calendardatepicker): initial implementation (#106)
* feat(calendardatepicker): initial implementation
1 parent 2c107b3 commit 48a2868

File tree

13 files changed

+254
-1
lines changed

13 files changed

+254
-1
lines changed

__tests__/Vuent.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { isInstalled, countInstalledPlugins } from './utils';
44
import {
55
VntAutosuggest,
66
VntButton,
7+
VntCalendarDatepicker,
78
VntCheckbox,
89
VntDialog,
910
VntHeader,
@@ -40,6 +41,7 @@ describe('Vuent', () => {
4041
test('installs all components', () => {
4142
expect(isInstalled(localVue, VntAutosuggest)).toBe(true);
4243
expect(isInstalled(localVue, VntButton)).toBe(true);
44+
expect(isInstalled(localVue, VntCalendarDatepicker)).toBe(true);
4345
expect(isInstalled(localVue, VntCheckbox)).toBe(true);
4446
expect(isInstalled(localVue, VntDialog)).toBe(true);
4547
expect(isInstalled(localVue, VntHeader)).toBe(true);
@@ -56,7 +58,7 @@ describe('Vuent', () => {
5658
expect(isInstalled(localVue, VntToggle)).toBe(true);
5759
expect(isInstalled(localVue, VntTooltip)).toBe(true);
5860

59-
expect(countInstalledPlugins(localVue)).toBe(17);
61+
expect(countInstalledPlugins(localVue)).toBe(18);
6062
});
6163

6264
test('has $vuent instance object', () => {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`CalendarDatePicker by default renders correctly 1`] = `
4+
<label class="vnt-input">
5+
<!---->
6+
<input type="date" placeholder="" class="vnt-input__control">
7+
</label>
8+
`;
9+
10+
exports[`CalendarDatePicker can be disabled renders correctly 1`] = `
11+
<label class="vnt-input" disabled="disabled">
12+
<!---->
13+
<input disabled="disabled" type="date" placeholder="" class="vnt-input__control">
14+
</label>
15+
`;

__tests__/calendardatepicker.test.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { createLocalVue, mount } from '@vue/test-utils';
2+
import { VntCalendarDatepicker } from '@/components';
3+
import { isInstalled } from './utils';
4+
5+
describe('CalendarDatePicker', () => {
6+
let localVue, wrapper;
7+
8+
beforeAll(() => {
9+
localVue = createLocalVue();
10+
localVue.use(VntCalendarDatepicker);
11+
});
12+
13+
test('can be installed separately', () => {
14+
expect(isInstalled(localVue, VntCalendarDatepicker)).toBe(true);
15+
});
16+
17+
describe('by default', () => {
18+
19+
beforeAll(() => {
20+
wrapper = mount(VntCalendarDatepicker);
21+
});
22+
23+
test('renders correctly', () => {
24+
expect(wrapper.html()).toMatchSnapshot();
25+
});
26+
27+
test('value is empty', () => {
28+
expect(wrapper.vm.value).toBe('');
29+
});
30+
31+
});
32+
33+
describe('can be disabled', () => {
34+
35+
beforeAll(() => {
36+
wrapper = mount(VntCalendarDatepicker, {
37+
propsData: {
38+
disabled: true
39+
}
40+
});
41+
});
42+
43+
test('renders correctly', () => {
44+
expect(wrapper.html()).toMatchSnapshot();
45+
});
46+
47+
});
48+
49+
describe('updates passed value', () => {
50+
51+
beforeAll(async () => {
52+
wrapper = mount(VntCalendarDatepicker, {
53+
propsData: {
54+
value: '12345'
55+
}
56+
});
57+
const input = wrapper.find('input');
58+
input.setValue('123456');
59+
});
60+
61+
test('event is emitted', () => {
62+
expect(wrapper.emitted().input).toHaveLength(1);
63+
});
64+
65+
test('entered value is emitted', () => {
66+
wrapper.vm.input('123456');
67+
68+
expect(wrapper.emitted().input[1]).toEqual(['123456']);
69+
});
70+
71+
});
72+
73+
});

commitlint.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module.exports = {
55
[
66
'autosuggest',
77
'button',
8+
'calendardatepicker',
89
'checkbox',
910
'dialog',
1011
'header',
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<template>
2+
<div class="playground">
3+
<vnt-calendar-datepicker v-model="date" />
4+
<div class="result">date: {{ date }}</div>
5+
</div>
6+
</template>
7+
8+
<script>
9+
import { VntCalendarDatepicker } from "../../../src/components";
10+
11+
export default {
12+
name: "CalendarDatepickerBasic",
13+
components: {
14+
VntCalendarDatepicker
15+
},
16+
data() {
17+
return {
18+
date: ''
19+
};
20+
}
21+
};
22+
</script>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<template>
2+
<div class="playground">
3+
<vnt-calendar-datepicker v-model="date" disabled />
4+
<div class="result">date: {{ date }}</div>
5+
</div>
6+
</template>
7+
8+
<script>
9+
import { VntCalendarDatepicker } from "../../../src/components";
10+
11+
export default {
12+
name: "CalendarDatepickerBasic",
13+
components: {
14+
VntCalendarDatepicker
15+
},
16+
data() {
17+
return {
18+
date: "2020-04-05"
19+
};
20+
}
21+
};
22+
</script>

docs/.vuepress/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module.exports = {
3232
'/components/autosuggest',
3333
'/components/button',
3434
'/components/checkbox',
35+
'/components/calendardatepicker',
3536
'/components/dialog',
3637
'/components/header',
3738
'/components/icon',

docs/components/calendardatepicker.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Calendar DatePicker
2+
3+
[[toc]]
4+
5+
## Basic
6+
7+
<calendar-datepicker-basic />
8+
9+
```html
10+
<vnt-calendar-datepicker v-model="date" />
11+
```
12+
13+
## Disabled
14+
15+
<calendar-datepicker-disabled />
16+
17+
```html
18+
<vnt-calendar-datepicker v-model="date" disabled />
19+
```
20+
21+
## Configuration
22+
23+
Same as for [Input](/components/input.html#configuration) component.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<template>
2+
<vnt-input v-model="localValue"
3+
v-bind="$attrs"
4+
type="date"
5+
@input="input" />
6+
</template>
7+
8+
<script>
9+
import VntInput from '../input/Input.vue';
10+
11+
export default {
12+
name: 'VntCalendarDatepicker',
13+
14+
components: {
15+
VntInput
16+
},
17+
18+
props: {
19+
value: {
20+
type: String,
21+
default: ''
22+
}
23+
},
24+
25+
data() {
26+
return {
27+
localValue: this.value
28+
};
29+
},
30+
31+
methods: {
32+
input(value) {
33+
this.$emit('input', value);
34+
}
35+
}
36+
};
37+
</script>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# CalendarDatePicker
2+
3+
## How to use
4+
5+
(Similar to the <vnt-input /> as it's a wrapper around it for `type` being set to `date`)
6+
7+
```html
8+
<vnt-calendar-datepicker v-model="[prop]" label="Text field" />
9+
```
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import CalendarDatePicker from './CalendarDatePicker.vue';
2+
3+
CalendarDatePicker.install = function (Vue) {
4+
Vue.component(CalendarDatePicker.name, CalendarDatePicker);
5+
};
6+
7+
export default CalendarDatePicker;

src/components/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import './Vnt.vue';
22
export { default as VntAutosuggest } from './autosuggest';
33
export { default as VntButton } from './button';
4+
export { default as VntCalendarDatepicker } from './calendardatepicker';
45
export { default as VntCheckbox } from './checkbox';
56
export { default as VntDialog } from './dialog';
67
export { default as VntHeader } from './header';
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { storiesOf } from '@storybook/vue';
2+
3+
/* eslint no-undef: 0 */
4+
storiesOf('CalendarDatePicker', module)
5+
.add('default', () => ({
6+
data() {
7+
return {
8+
date: ''
9+
};
10+
},
11+
template: `
12+
<div>
13+
<vnt-calendar-datepicker v-model="date" />
14+
<p class="result">date: {{ date }}</p>
15+
</div>`
16+
}))
17+
.add('disabled', () => ({
18+
data() {
19+
return {
20+
date: '2020-01-15'
21+
};
22+
},
23+
template: `
24+
<div>
25+
<vnt-calendar-datepicker v-model="date" disabled />
26+
<p class="result">date: {{ date }}</p>
27+
</div>`
28+
}))
29+
.add('with date', () => ({
30+
data() {
31+
return {
32+
date: '2020-01-15'
33+
};
34+
},
35+
template: `
36+
<div>
37+
<vnt-calendar-datepicker v-model="date" />
38+
<p class="result">date: {{ date }}</p>
39+
</div>`
40+
}));

0 commit comments

Comments
 (0)