Skip to content

Commit fb6fc85

Browse files
committed
feat(input): add prop to only open on button click
1 parent 674b95f commit fb6fc85

File tree

5 files changed

+50
-14
lines changed

5 files changed

+50
-14
lines changed

docs/.vuepress/components/Demo.vue

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<Datepicker
1414
v-model="vModelExample"
1515
placeholder="Select Date"
16-
></Datepicker>
16+
/>
1717
<div class="coding">
1818
<code>
1919
&lt;datepicker placeholder="Select Date" v-model="vmodelexample"&gt;&lt;/datepicker&gt;
@@ -25,30 +25,30 @@
2525

2626
<div class="example">
2727
<h3>With default open date</h3>
28-
<Datepicker :open-date="openDate"></Datepicker>
28+
<Datepicker :open-date="openDate"/>
2929
<code>
3030
&lt;datepicker :disabled="disabled"&gt;&lt;/datepicker&gt;
3131
</code>
3232
<div class="settings">
3333
<h5>Settings</h5>
3434
<div class="form-group">
3535
<label>Open date:</label>
36-
<Datepicker v-model="openDate"></Datepicker>
36+
<Datepicker v-model="openDate"/>
3737
</div>
3838
<pre>openDate: {{ openDate }}</pre>
3939
</div>
4040
</div>
4141

4242
<div class="example">
4343
<h3>Inline datepicker</h3>
44-
<Datepicker :inline="true"></Datepicker>
44+
<Datepicker :inline="true"/>
4545
<code>
4646
&lt;datepicker :inline="true"&gt;&lt;/datepicker&gt;
4747
</code>
4848
</div>
4949
<div class="example">
5050
<h3>RTL datepicker</h3>
51-
<Datepicker :language="$datepickerLocals.he"></Datepicker>
51+
<Datepicker :language="$datepickerLocals.he"/>
5252
<code>
5353
&lt;datepicker :language="$datepickerLocals.he"&gt;&lt;/datepicker&gt;
5454
</code>
@@ -59,7 +59,7 @@
5959
<Datepicker
6060
:minimum-view="'day'"
6161
:maximum-view="'day'"
62-
></Datepicker>
62+
/>
6363
<code>
6464
&lt;datepicker :minimumView="'day'" :maximumView="'day'"&gt;&lt;/datepicker&gt;
6565
</code>
@@ -71,7 +71,7 @@
7171
:minimum-view="'day'"
7272
:maximum-view="'day'"
7373
:language="$datepickerLocals.he"
74-
></Datepicker>
74+
/>
7575
<code>
7676
&lt;datepicker :minimumView="'day'" :maximumView="'day'"
7777
language="$datepickerLocals.he"&gt;&lt;/datepicker&gt;
@@ -83,7 +83,7 @@
8383
<Datepicker
8484
:minimum-view="'month'"
8585
:maximum-view="'month'"
86-
></Datepicker>
86+
/>
8787
<code>
8888
&lt;datepicker :minimumView="'month'" :maximumView="'month'"&gt;&lt;/datepicker&gt;
8989
</code>
@@ -95,7 +95,7 @@
9595
:minimum-view="'day'"
9696
:maximum-view="'month'"
9797
:initial-view="'month'"
98-
></Datepicker>
98+
/>
9999
<code>
100100
&lt;datepicker :minimumView="'day'" :maximumView="'month'"
101101
:initialView="'month'"&gt;&lt;/datepicker&gt;
@@ -108,12 +108,23 @@
108108
:minimum-view="'month'"
109109
:maximum-view="'year'"
110110
:initial-view="'year'"
111-
></Datepicker>
111+
/>
112112
<code>
113113
&lt;datepicker :minimumView="'month'" :maximumView="'year'"
114114
:initialView="'year'"&gt;&lt;/datepicker&gt;
115115
</code>
116116
</div>
117+
118+
<div class="example">
119+
<h3>With Button</h3>
120+
<Datepicker
121+
:calendar-button="true"
122+
:show-calendar-on-button="true"
123+
/>
124+
<code>
125+
&lt;datepicker :calendar-button="true" :show-calendar-on-button="true"&gt;&lt;/datepicker&gt;
126+
</code>
127+
</div>
117128
</div>
118129
</template>
119130

src/components/DateInput.vue

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
:class="{'input-group-prepend' : bootstrapStyling}"
88
:style="{'cursor:not-allowed;' : disabled}"
99
class="vdp-datepicker__calendar-button"
10-
@click="showCalendar"
10+
@click="showCalendar(true)"
1111
>
1212
<span :class="{'input-group-text' : bootstrapStyling}">
1313
<i :class="calendarButtonIcon">
@@ -34,7 +34,7 @@
3434
:readonly="!typeable"
3535
:tabindex="tabindex"
3636
autocomplete="off"
37-
@click="showCalendar"
37+
@click="showCalendar(false)"
3838
@focus="showFocusCalendar"
3939
@keyup="parseTypedDate"
4040
@blur="inputBlurred"
@@ -124,10 +124,19 @@ export default {
124124
this.input = this.$el.querySelector('input')
125125
},
126126
methods: {
127-
showCalendar() {
127+
showCalendar(isButton) {
128128
// prevent to emit the event twice if we are listening focus
129129
if (!this.showCalendarOnFocus) {
130-
this.$emit('show-calendar')
130+
if (
131+
!this.showCalendarOnButtonClick
132+
|| (
133+
this.showCalendarOnButtonClick
134+
&& this.calendarButton
135+
&& isButton
136+
)
137+
) {
138+
this.$emit('show-calendar')
139+
}
131140
}
132141
},
133142
showFocusCalendar() {

src/components/Datepicker.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
:use-utc="useUtc"
2828
:show-calendar-on-focus="showCalendarOnFocus"
2929
:tabindex="tabindex"
30+
:show-calendar-on-button-click="showCalendarOnButtonClick"
3031
@show-calendar="showCalendar"
3132
@close-calendar="close(true)"
3233
@typed-date="setTypedDate"

src/mixins/inputProps.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ export default ({
100100
type: Boolean,
101101
default: false,
102102
},
103+
showCalendarOnButtonClick: {
104+
type: Boolean,
105+
default: false,
106+
},
103107
},
104108
})
105109
</script>

test/unit/specs/DateInput/DateInput.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,15 @@ describe('DateInput', () => {
117117
wrapper.find('input').trigger('focus')
118118
expect(wrapper.emitted('show-calendar')).toBeTruthy()
119119
})
120+
121+
it('should open the calendar only on calendar button click', () => {
122+
wrapper.setProps({
123+
calendarButton: true,
124+
showCalendarOnButtonClick: true,
125+
})
126+
wrapper.find('input').trigger('click')
127+
expect(wrapper.emitted('show-calendar')).toBeFalsy()
128+
wrapper.find('.vdp-datepicker__calendar-button').trigger('click')
129+
expect(wrapper.emitted('show-calendar')).toBeTruthy()
130+
})
120131
})

0 commit comments

Comments
 (0)