Skip to content

Commit a0b33c3

Browse files
Merge pull request #112 from brd6/feature/enabled-dates-option
Add an option to allow only certain dates
2 parents 4dd1ea6 + 3bcc139 commit a0b33c3

File tree

4 files changed

+39
-3
lines changed

4 files changed

+39
-3
lines changed

src/Demo.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121
</span>
2222
<table style="width: 100%">
2323
<tr>
24+
<td>
25+
<button class="btn" @click="enabledDates = ['28/10/2020', '29/10/2020']">Change</button>
26+
<functional-calendar
27+
:is-date-picker="true"
28+
:enabled-dates="enabledDates"
29+
></functional-calendar>
30+
</td>
2431
<td>
2532
<functional-calendar></functional-calendar>
2633
</td>
@@ -587,6 +594,7 @@ export default {
587594
],
588595
markedDates2: [],
589596
disabledDates: [],
597+
enabledDates: ['27/10/2020', '28/10/2020'],
590598
calendarConfigs: {
591599
isMultipleDatePicker: true,
592600
dayNames: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']

src/components/Day.vue

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,15 +248,27 @@ export default {
248248
)
249249
},
250250
isDisabledDate(date) {
251+
const datesCollection = this.fConfigs.disabledDates;
252+
253+
return !this.isEnabledDate(date) ||
254+
this.isDateIncludedInDatesCollection(date, datesCollection);
255+
},
256+
isEnabledDate(date) {
257+
const datesCollection = this.fConfigs.enabledDates;
258+
259+
return datesCollection.length === 0 ||
260+
this.isDateIncludedInDatesCollection(date, datesCollection);
261+
},
262+
isDateIncludedInDatesCollection(date, datesCollection) {
251263
let today = new Date()
252264
today.setHours(0, 0, 0, 0)
253265
let dateObj = this.helpCalendar.getDateFromFormat(date)
254266
255267
return (
256-
this.fConfigs.disabledDates.includes(date) ||
257-
(this.fConfigs.disabledDates.includes('beforeToday') &&
268+
datesCollection.includes(date) ||
269+
(datesCollection.includes('beforeToday') &&
258270
dateObj.getTime() < today.getTime()) ||
259-
(this.fConfigs.disabledDates.includes('afterToday') &&
271+
(datesCollection.includes('afterToday') &&
260272
dateObj.getTime() > today.getTime())
261273
)
262274
},

src/components/FunctionalCalendar.vue

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,18 @@ export default {
378378
window.removeEventListener('click', this.hideMonthYearPicker)
379379
},
380380
watch: {
381+
enabledDates: {
382+
handler() {
383+
this.fConfigs.enabledDates = this.enabledDates;
384+
},
385+
deep: true
386+
},
387+
'configs.enabledDates': {
388+
handler() {
389+
this.fConfigs.enabledDates = this.configs.enabledDates;
390+
},
391+
deep: true
392+
},
381393
fConfigs: {
382394
handler() {
383395
this.markChooseDays()

src/mixins/propsAndData.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ export const propsAndData = {
104104
disabledDates: {
105105
type: Array
106106
},
107+
enabledDates: {
108+
type: Array
109+
},
107110
limits: {
108111
type: [Object, Boolean],
109112
default: undefinedGenerator
@@ -223,6 +226,7 @@ export const propsAndData = {
223226
maxSelDays: false,
224227

225228
disabledDates: [],
229+
enabledDates: [],
226230
disabledDayNames: [],
227231

228232
dayNames: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'],

0 commit comments

Comments
 (0)